Domanda

Quando si crea una stringa usando la seguente notazione:

NSString *foo = @"Bar";

È necessario rilasciare foo ? O foo è rilasciato automaticamente in questo caso?

È stato utile?

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

http://developer.apple.com/documentation/ Cocoa / concettuali / MemoryMgmt / mansioni / MemoryManagementRules.html

  

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 "

NOTA

NSString *str = [NSString string];

è equivalente a:

NSString *str = [[[NSString alloc] init] autorelease];

quindi release o autorelease non devono essere passati anche qui.

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