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 !!

È stato utile?

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. ****

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top