Frage

Wenn Sie eine Zeichenfolge Erstellen der folgenden Notation:

NSString *foo = @"Bar";

Braucht man foo veröffentlichen? Oder ist foo Autoreleased in diesem Fall?

War es hilfreich?

Lösung

Compiler zugewiesen Strings (im Format @ "STRING") konstant ist, und so -retain, -release und -autorelease Nachrichten an sie ignoriert werden. Sie müssen nicht freigeben oder Autorelease foo in diesem Fall (aber es wird nicht weh).

Andere Tipps

Wie in der Dokumentation erwähnt

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

  

Sie nehmen das Eigentum an einem Objekt, wenn Sie   schaffen sie ein Verfahren, dessen Name mit   beginnt mit „alloc“ oder „neu“ oder   enthält „Kopie“ (zum Beispiel alloc,   newObject oder mutableCopy), oder wenn Sie   Bitte senden Sie eine Nachricht es behalten. Sie sind   verantwortlich für den Verzicht auf   Besitz von Objekten, die Sie besitzen mit   freigeben oder Autorelease. Zu jeder anderen Zeit   Sie ein Objekt erhalten, müssen Sie nicht   loslassen.

Da Sie nicht alloc verwenden, kopieren, usw. Sie brauchen, um das Objekt keine Sorgen über die Freigabe.

ich mit @ Ben \ Gottlieb stimmen bei „Compiler-Strings zugewiesen (das Format @“ STRING „) sind Konstanten“ aber, wie Sie sie über Leiten eines alloc oder retain Nachricht nicht initialisiert haben, müssen Sie nicht release oder autorelease Nachricht übergeben ihnen sonst die App mit dem folgenden Protokoll abstürzen

  

"Zeiger befreit wurde nicht   zugeordnet "

HINWEIS

NSString *str = [NSString string];

entspricht:

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

so release oder autorelease darf hier nicht zu übergeben werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top