Noob Frage:
Ich habe derzeit den Eindruck, dass wenn Sie ein Objekt erstellen möchten, müssen Sie alloc
und init
das Objekt.
Ich habe jedoch mehrere Beispielcodes gesehen, in denen ein NSString
-Objekt deklariert ist, aber ich sehe keine Nachrichten alloc
oder init
nach ...
Ein sehr einfaches Beispiel:
%Vor%
Kann jemand erklären, warum das so ist?
Wenn Sie für eine Variable deklarieren, müssen Sie keinen Speicher freigeben.
Objekte instanziieren . Und Sie können ein neues Objekt nur dann instanziieren, wenn Sie alloc oder copy
aufrufenIn Ihrem Beispiel legen Sie Ihre Referenz auf das bereits vorhandene Objekt fest, das der Compiler aus der fest codierten Zeichenfolge erstellt. Und Sie müssen sein Gedächtnis nicht verwalten, weil Sie es nicht instanziiert haben.
Ich weiß nicht, ob ich es klar genug erkläre.
BEARBEITEN:
Es sieht so aus, als gäbe es bereits eine Frage, die das beantwortet:
Ist ein literaler NSString automatisch freigegeben oder muss er freigegeben werden?
Wenn Sie ein NSString
Literal in Ihren Code einbetten, z. B. @"hello, world'
, reserviert der Compiler in Ihrer ausführbaren Datei Platz dafür und es wird in den Speicher geladen und initialisiert, wenn Ihr Programm startet.
Da es Teil Ihrer ausführbaren Datei ist, wird es für die gesamte Lebensdauer Ihrer App verwendet. Es gibt keine Notwendigkeit, es zu behalten oder freizugeben. Die Variable NSString *myString
, die Sie dafür erstellen, ist ein Zeiger auf die Stelle im Speicher, an die der Compiler das NSString
Literal gesetzt hat.
Tags und Links string objective-c nsstring