21 Stimmen

Wird ein literaler NSString automatisch freigegeben oder muss er freigegeben werden?

Bei der Erstellung einer Zeichenkette wird die folgende Notation verwendet:

NSString *foo = @"Bar";

Muss man die foo ? Oder ist foo in diesem Fall automatisch ausgelöst?

0 Stimmen

Es tut mir leid, die Antwort zu spät hinzuzufügen, aber ich denke, Sie sollten sie auf Vollständigkeit überprüfen, da die Antwort von Ben einige Fehler enthält.

18voto

Ben Gottlieb Punkte 84876

Vom Compiler zugewiesene Strings (im Format @"STRING") sind konstant, so dass -retain-, -release- und -autorelease-Meldungen an sie ignoriert werden. Sie müssen foo in diesem Fall nicht freigeben oder automatisch freigeben (aber es schadet nicht).

15voto

August Punkte 12061

Wie in den Dokumentationen erwähnt

http://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/Tasks/MemoryManagementRules.html

Sie übernehmen die Verantwortung es mit einer Methode erstellen, deren Name mit "alloc" oder "new" beginnt oder "copy" enthält (zum Beispiel alloc, newObject, oder mutableCopy), oder wenn Sie eine Retain-Nachricht senden. Sie sind verantwortlich für die Übergabe von Eigentum an Objekten, die Sie besitzen, mit release oder autorelease. Jedes andere Mal Sie ein Objekt erhalten, dürfen Sie es nicht freigeben.

Da Sie alloc, copy, etc. nicht verwenden, müssen Sie sich nicht um die Freigabe des Objekts kümmern.

7voto

Madhup Singh Yadav Punkte 8147

Ich stimme @Ben\ Gottlieb zu: "Vom Compiler zugewiesene Zeichenketten (des Formats @"STRING") sind Konstanten", aber da Sie sie nicht durch Übergabe einer alloc o retain Nachricht, dürfen Sie nicht release o autorelease Nachricht an sie senden, sonst stürzt Ihre Anwendung mit folgendem Protokoll ab

"p zugewiesen"

ANMERKUNG

NSString *str = [NSString string];

ist gleichbedeutend mit:

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

also release o autorelease darf auch hier nicht überschritten werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X