2009-12-02 14 views
9

Ho una domanda sul modo sicuro o correttamente la conversione di un NSString in tipi come CGFloat e NSInteger, considerando che questi sono semplicemente tipi di wrapper che Apple ha creato per utilizzare diverse primitive a seconda di alcuni fattori (ad esempio, NSInteger è typedef 'a int su architetture a 32 bit e long su architetture a 64 bit).correttamente Conversione NSString a CGFloat, NSInteger, ecc

Per esempio, so che posso usare qualcosa come [ someString intValue ] o [ someString longValue ], ma come faccio a dire che invece voglio someString diventare un NSInteger, permettendo la precisione del primitivo sottostante di essere scelto dal compilatore? Dire qualcosa come NSInteger integer = [ someString intValue ] comporterebbe la perdita di dati se someString è stato creato da un NSInteger su un sistema a 64 bit, giusto? Qual è il modo migliore per affrontare questa situazione?

risposta

11

Utilizzare invece integerValue. E ottenere un int causerà solo un problema se il numero intero rappresentato dalla stringa è maggiore di INT_MAX a 32 bit, ma è ancora meglio usare il metodo più compatibile.

+0

Ah, grazie. Non ho nemmeno notato 'integerValue'. – LucasTizma

+0

Ecco perché dovresti leggere le note di rilascio ogni volta che esce una versione principale del sistema operativo. Ci sono sempre alcune aggiunte utili alle lezioni che abbiamo conosciuto e amato per molti anni. – NSResponder

+1

E per la conversione in CGFloat? – Casebash

Problemi correlati