Questa risposta del decennio precedente,
è ora solo di interesse storico.
Oggi, è necessario utilizzare ARC.
Acclamazioni
La risposta molto breve è DO NOT basta impostarlo a zero. È necessario rilasciarlo. Impostarlo su zero non ha alcuna connessione al rilascio. Devi liberarlo.
Tuttavia vale la pena ricordare che se si tratta di una proprietà, quindi
self.obj = nil;
sarà in un dato di fatto rilasciare per voi. Certo, non devi dimenticare il "sé". parte !!!!
Infatti,
self.obj = anyNewValue;
sarà davvero liberare la vecchia memoria per voi, pulire tutto magicamente e configurarlo con il nuovo valore. Quindi, self.obj = nil è solo un caso speciale di questo, rilascia e pulisce tutto e poi lo lascia a zero.
Quindi se qualcuno leggendo questa è nuovo e completamente confuso dalla memoria,
Devi rilasciarlo, [x rilascio] prima di impostarla a zero x = nil
SE voi stanno usando una proprietà, "non dimenticate il sé. thingy"
SE si sta utilizzando una proprietà, si può semplicemente dire self.x = nil o effettivamente sel f.x = somethingNew e si prenderà cura del rilascio e di tutte le altre cose complicate e fastidiose.
Alla fine dovrai imparare tutte le cose complicate su rilascio, autorelease, blah blah blah. Ma la vita è breve, non pensarci più: -/
Spero che aiuti qualcuno.
Ancora una volta, questo post è ora completamente sbagliato. Usa ARC.
Solo per interessi storici.
Il bit sulle proprietà che vengono rilasciate magicamente non è completamente vero. Se dichiari una proprietà con l'attributo "retain", devi rilasciarlo da solo, solo se lo dichiari con l'attributo "copy", viene rilasciato per te nel modo descritto. Vedere http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocProperties.html – dertoni
Penso che potrebbe aver significato "assegnare", non "conservare". Inoltre, self.obj = someNewValue non dovrebbe attivare gli ascoltatori di KVO? –
Per chiarire, self.obj = newValue rilascia il vecchio valore, se si stanno utilizzando le proprietà correttamente. Mi piacerebbe aggiungere che self.obj = newValue è identico a [self setObj: newValue], che è il modo in cui avviene il rilascio (il metodo setObj contiene [oldValue release]). Inoltre, se stai rilasciando l'oggetto, non vorresti che KVO venisse attivato? – andyvn22