Ist eine wörtliche NSString Autoreleased oder braucht sie freigegeben werden?
-
11-07-2019 - |
Frage
Wenn Sie eine Zeichenfolge Erstellen der folgenden Notation:
NSString *foo = @"Bar";
Braucht man foo
veröffentlichen? Oder ist foo
Autoreleased in diesem Fall?
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
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 "
NSString *str = [NSString string];
entspricht:
NSString *str = [[[NSString alloc] init] autorelease];
so release
oder autorelease
darf hier nicht zu übergeben werden.