Un letterale NSString è rilasciato automaticamente o deve essere rilasciato?
-
11-07-2019 - |
Domanda
Quando si crea una stringa usando la seguente notazione:
NSString *foo = @"Bar";
È necessario rilasciare foo
? O foo
è rilasciato automaticamente in questo caso?
Soluzione
Le stringhe allocate dal compilatore (del formato @ " STRING ") sono costanti, e quindi i messaggi -retain, -release e -autorelease vengono ignorati. Non è necessario rilasciare o rilasciare automaticamente il foo in questo caso (ma non farà male).
Altri suggerimenti
Come menzionato nei documenti
Prendi la proprietà di un oggetto se lo fai crearlo usando un metodo il cui nome inizia con & # 8220; alloc & # 8221; o & # 8220; nuovo & # 8221; o contiene & # 8220; copia & # 8221; (ad esempio alloc, newObject o mutableCopy) o, se lo desideri inviagli un messaggio di conservazione. Siete responsabile della rinuncia proprietà degli oggetti che possiedi utilizzando rilascio o rilascio automatico. Qualsiasi altra volta ricevi un oggetto, non devi rilascialo.
Dato che non stai usando alloc, copy, ecc. non devi preoccuparti di rilasciare l'oggetto.
Sono d'accordo con @Ben \ Gottlieb in "stringhe allocate dal compilatore (del formato @" STRING ") sono costanti" ma poiché non li hai inizializzati passando un messaggio alloc
o conserva
, non devi passare rilasciare
o autorelease
messaggio a loro altrimenti la tua app andrà in crash con il seguente registro
" puntatore liberato non lo era allocato "
NSString *str = [NSString string];
è equivalente a:
NSString *str = [[[NSString alloc] init] autorelease];
quindi release
o autorelease
non devono essere passati anche qui.