2010-12-15 16 views
8

Das mag als triviale Frage erscheinen.Warum werden Objektvariablen mit einem Stern deklariert?

Aber warum ist, dass wir das Sternchen-Symbol verwenden, wenn Objektvariablen erklärt

Wie machen wir

Car * mazda = [[Car alloc] init]; 

Was die Bedeutung des Sterns ist, ich meine der Compiler bereits weiß, dass es ein Objekt ist Ich bin mir sicher, dass der Compiler trainiert werden kann, sich nicht zu beschweren. Aber dann wieder, indem ich es weglasse, erhalte ich eine Fehlermeldung "statisch zuzuordnende Instanz von objective-c class NSObject" Welchen Zweck würde das erfüllen?

+0

mögliches Duplikat von [Why \ [object doSomething \] und not \ [* object doSomething \]?] (Http://stackoverflow.com/questions/2189212/why-object-dosomething-and-not-object- dosomething) – bbum

Antwort

10

Das Sternchen ist ein Qualifikationsmerkmal für die Variable Car, die Sie deklarieren. Es bedeutet, dass Sie einen Zeiger auf ein Auto deklarieren, anstatt ein Auto selbst zu deklarieren. Der Rückgabewert der init-Funktion (und der Zuweisungsfunktion für diese Angelegenheit) ist ein Zeiger auf ein Auto, nicht auf ein Auto selbst, daher ist dies korrekt.

+0

Danke, das macht sehr viel Sinn. Also das Sternchen ist in jedem Szenario Pflicht. Oder was ich frage ist, in welchen Szenarien benutzen wir nicht den Asterix. – stone

+2

Wenn du von einem echten 'Auto' (oder welcher Klasse auch immer) sprichst, brauchst du kein' * '. Wenn Sie sich auf einen ** Zeiger ** auf ein 'Auto' beziehen (wie in diesem Fall), tun Sie das. –

+0

Es gibt keine Szenarien, in denen Sie das Sternchen für Objekte in Objective-C nicht verwenden. In diesem Sinne wird es nicht benötigt. Alle anderen Zeigertypen in C und daher Objective-C verwenden jedoch zum Beispiel den Stern - int * foo - also aus Konsistenzgründen. –

4

Objective-C erfordert, dass alle Objekte dynamisch zugeordnet werden (d. H. Auf dem Heap). Der Fehler, den Sie erhalten, zeigt an, dass Sie versuchen, ein Auto-Objekt auf dem Stapel zu erstellen. Indem Sie Mazda als einen Zeiger auf Auto (Car *) statt auf ein Auto deklarieren, erfüllen Sie diese Anforderung.

+0

Danke, In welchem ​​Szenario benutze ich den Asterix nicht? – stone

+3

Wenn die fragliche Variable ein Objective C-Objekt ist, verwenden Sie immer den Stern. Wenn die Variable eine C-Struktur oder ein Grundelement ist (NSInteger, CGRect, CGFloat, int usw.), müssen Sie den Stern nicht verwenden, da C beim Erstellen von Objekten auf dem Stapel in Ordnung ist. –

6

Mit * deklarieren Sie einen Zeiger. Das ist wie in C, welches eine Untermenge von ObjC ist. Ohne die * würde die Variable statisch zugewiesen, was für ObjC-Objekte nicht möglich ist (weil die Größe des Objekts zur Kompilierzeit nicht bestimmt werden konnte).

Statisch zugewiesen Variablen werden für primitive C-Typen wie int verwendet oder Doppel

int number = 42; 
0

Der Stern in der Variablendeklaration bedeutet auch, dass der Wert der Variablen keinen statischen zugewiesenen Wert hat. Es ist ein Zeiger genau wie die anderen gesagt haben.

Verwandte Themen