Müssen NSString-Objekte allokiert und init sein?

8

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?

    
ChrisR 12.03.2009, 01:07
quelle

2 Antworten

12

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

aufrufen

In 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?

    
Sergio Acosta 12.03.2009, 01:10
quelle
6

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.

    
Don McCaughey 12.03.2009 01:54
quelle

Tags und Links