iPhone Dev - Creazione NSString
-
06-07-2019 - |
Domanda
Sono davvero confuso con NSStrings. Come quando dovrei farlo
NSString *aString = @"Hello";
di dovrebbe essere:
NSString *aString = [[NSString alloc] initWithString:@"Hello"];
Ma allora è diverso quando si assegna un valore a una proprietà NSString, non è vero? Qualcuno può chiarire questo per me?
Grazie !!
Soluzione
In generale dovresti fare il primo, ma sono per lo più funzionalmente uguali. Puoi trattare costanti NSString proprio come i normali oggetti stringa NSString, ad esempio:
[@"Hello" length]
restituirà 5. Puoi assegnarli alle proprietà, tutto funziona. L'unica cosa che potresti notare è che con le costanti NSStrings non devi preoccuparti di trattenere / rilasciare. Questo perché in realtà sono mappati nella sezione dati di sola lettura delle applicazioni e non hanno memoria allocata. Conservare e rilasciare le chiamate contro di loro funzionano ancora, diventano semplicemente noops.
Altri suggerimenti
NSString *aString = @"Hello";
Crea una stringa autoreleased
. Cioè, se non lo si conserva
esplicitamente, potrebbe scomparire dopo la fine del metodo (e talvolta è del tutto soddisfacente). Ma se vuoi trattenerlo oltre quel tempo, dovrai conservarlo.
Se crei una proprietà per quella stringa in questo modo
@property (retain) NSString *aString;
E quindi assegnare in questo modo:
self.aString = @"Hello";
Quindi hai conservato correttamente la stringa e si attaccherà.
D'altra parte, usando alloc, init
creerai una stringa per te con un conteggio di mantenimento di 1, e se non ti serve oltre quel metodo, dovresti rilasciare
.
**** Modifica: @ " Ciao " non è una stringa rilasciata automaticamente, come altri hanno sottolineato. Colpa mia. ****