2013-12-18 21 views
5

Qual è la procedura migliore per l'analisi del tipo primitivo in iOS (int, float, BOOL ecc.) Durante la memorizzazione in dataObjects per un utilizzo successivo.Standard di codifica per l'analisi dei tipi primitivi in ​​iOS

Devo analizzarlo e memorizzarlo come NSNumber, o semplicemente memorizzarlo come una proprietà di tipo primitivo?

Ad esempio: se ottengo "userId" dal server come lungo tipo. Questo dovrebbe essere:

@property (nonatomic, strong) NSNumber *userId; 

self.userId = [element objectForKey:@"user_id"]; 

o:

@property (nonatomic, assign) long userId; 

self.userId = [[element objectForKey:@"user_id"] longValue]; 

Grazie.

+1

Se vuoi memorizzarli in un NSArray o NSDictionary, ovviamente NSNumber, e così via, è la strada da percorrere. Ma per comodità per l'uso "quotidiano", il tipo primitivo è migliore. Può essere particolarmente frustrante test, ad esempio un NSNumber di un BOOL e dimenticare di prendere il valore boolValue di esso. –

+0

Il tuo titolo parla dell'analisi - tuttavia, la tua domanda non ha nulla a che fare con * parsing *. Se il server ti invia un JSON, il parser * JSON * "analizzerà" effettivamente il testo JSON e creerà una rappresentazione. Molto probabilmente non ti preoccuperai mai di analizzare personalmente il JSON. – CouchDeveloper

risposta

1

Dal mio punto di vista, è una buona pratica averlo in forma primitiva finché non li indulgere in operazioni pesanti. È un onere in meno per il compilatore. Ovviamente, non costa nemmeno un ciclo di clock per il processore. Ma diventa efficiente man mano che passi a un numero maggiore di dati.

0

Se facendo troppo operazione matematica o qualcosa di utilizzo di dati primitivi ..

E, è possibile creare il getter e setter propria, come

-(long) getuserId 
{ 
    return userID; 
} 

-(void) setuserId:(long) userId 
{ 
    userID = userId; 
} 

Ma se non fare alcuna operazione complessa, meglio attenersi ai non primitivi. Poiché eseguire operazioni su oggetti come NSNumber è piuttosto semplice e vengono forniti con metodi predefiniti per eseguire operazioni su di essi.

0

Dipende davvero da ciò che si desidera o si ha bisogno di fare con esso. Memorizzarlo come NSNumber aggiunge un po 'di overhead e molta convenienza per cose come la conversione ad altri tipi di valore e l'inserimento negli oggetti di raccolta.

0

Il tipo di dati è un numero? Se non lo è, non lo memorizzerei come uno.

consideri si memorizza un BOOL come NSNumber: uno sviluppatore poi guardando il tuo codice potrebbe ben pensare che il seguente codice è sufficiente:

if (_registered) { 
// whatever 
} 

dove registered è un NSNumber che sembra un BOOL.

+0

Questo è un punto valido. anche se posso implementare un metodo get per _registered per restituire [_registered boolValue]; – Lirik

0

Su approccio è un "due teste" uno:

@property(nonatomic, strong) NSNumber* myBoolObj; 
-(BOOL)myBool; 

... 

-(BOOL)myBool { 
    return myBoolObj.boolValue; 
} 

In particolare la scelta di un nome che termina con una parola come "Obj" (e con quel suffisso costantemente per tutte queste proprietà "ibridi") non si è in grado di utilizzare accidentalmente myBoolObj dove si intende myBool. Ma hai ancora il vantaggio di poter assegnare facilmente il tuo valore a/da NSDictionaries e NSArrays, ecc.

Problemi correlati