Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [objective c] Wozu * bei Objektdefinition? (https://www.delphipraxis.net/149919-%5Bobjective-c%5D-wozu-%2A-bei-objektdefinition.html)

MrSpock 2. Apr 2010 11:31


[objective c] Wozu * bei Objektdefinition?
 
Hallo,

ich beschäftige mich zur Zeit mit Objective C. Wenn man einen allgemeinen Platzhalter für Objekte definiert, geht das ja z.B. so:

Code:
id myNumer;
myNumber = [NSNumber numberWithFloat: 3.14];
Das habe ich verstanden. Es wird der Klasse NSNumer die Nachricht numerWithFloat geschickt und das entstehende Objekt mit dem Wert 3.14 initialisiert. Dieses Objekt wird dann myNumber zugewiesen.

Wenn ich aber nicht mit Platzhaltern arbeite, dann sieht das ja so aus:

Code:
NSNumber *myNumber = [NSNumber numberWithFloat: 3.14];
Warum ist dabei der * nötig? :gruebel:

Gehstock 2. Apr 2010 12:21

Re: [objective c] Wozu * bei Objektdefinition?
 
Pointer?

MrSpock 2. Apr 2010 12:43

Re: [objective c] Wozu * bei Objektdefinition?
 
Naja, von der Notation habe ich auch an Pointer gedacht, aber ich greife ja anschließend z.B. mit:

Code:
printf("Der Float Wert: %f\n", [myNumber floatValue]);
auf myNumber zu. Dort sieht es ja nicht mehr nach Pointer aus.

rollstuhlfahrer 2. Apr 2010 13:57

Re: [objective c] Wozu * bei Objektdefinition?
 
Der Stern gibt an, dass es sich bei der Variable ab sofort um ein bestimmtes Objekt handelt und gleichzeitig wird der Construktor aufgerufen. Also so ähnlich wie Obj = new Klasse

Bernhard

MrSpock 2. Apr 2010 14:13

Re: [objective c] Wozu * bei Objektdefinition?
 
Hallo Bernhard,

ok danke, das macht Sinn. Ich finde die Notation nur nicht ganz eingängig. Ich hätte genau das, was du schreibst eher ohne diesen Stern erwartet:

Code:
 NSNumber myNumber = [NSNumber numberWithFloat: 3.14]; // Falscher Code da * fehlt
Aber ok, so ist es hat bei NextStep gewesen. :stupid:

Khabarakh 2. Apr 2010 15:02

Re: [objective c] Wozu * bei Objektdefinition?
 
Zitat:

Zitat von MrSpock
Dort sieht es ja nicht mehr nach Pointer aus.

Würdest du denn in Delphi beim Aufrufen einer Methode ein ^ brauchen ;) ?
Ich habe mal kurz die Einleitung überflogen:
Zitat:

Just as id is actually a pointer, objects are statically typed as pointers to a class. Objects are always typed by a pointer. Static typing makes the pointer explicit; id hides it.
Ein NSNumber a kann es also gar nicht geben (genauso wenig wie in Delphi/...) und deswegen wird die Dereferenzierung beim Aufruf impliziert (im Gegensatz zu *. oder -> bei C++).
Wohl lieber zum Gehstock als zum rollstuhl greifen, würde ich sagen :P .

MrSpock 2. Apr 2010 16:03

Re: [objective c] Wozu * bei Objektdefinition?
 
Zitat:

Zitat von Khabarakh
Zitat:

Zitat von MrSpock
Dort sieht es ja nicht mehr nach Pointer aus.

Würdest du denn in Delphi beim Aufrufen einer Methode ein ^ brauchen ;) ?

Äh ja!

Delphi-Quellcode:
pMyInt: ^Integer;
pMyInt^ := 7;
Writeln(pMyInt^);
Zitat:

Zitat von Khabarakh
Ich habe mal kurz die Einleitung überflogen:
Zitat:

Just as id is actually a pointer, objects are statically typed as pointers to a class. Objects are always typed by a pointer. Static typing makes the pointer explicit; id hides it.
Ein NSNumber a kann es also gar nicht geben (genauso wenig wie in Delphi/...) und deswegen wird die Dereferenzierung beim Aufruf impliziert (im Gegensatz zu *. oder -> bei C++).
Wohl lieber zum Gehstock als zum rollstuhl greifen, würde ich sagen :P .

Ok, also ist das die Notation für "static typing" vs. "dynamic typing" mit id. Das id die Referenzierung und Dereferenzierung verbirgt verstehe ich ja. Aber in der Object C spezifischen Schreibweise von Objecten, denen eine Nachricht geschickt wird, muss dann wohl der Name des Objektes ohne Dereferenzierung übergeben werden.

Khabarakh 2. Apr 2010 16:25

Re: [objective c] Wozu * bei Objektdefinition?
 
Zitat:

Zitat von MrSpock
Zitat:

Zitat von Khabarakh
Zitat:

Zitat von MrSpock
Dort sieht es ja nicht mehr nach Pointer aus.

Würdest du denn in Delphi beim Aufrufen einer Methode ein ^ brauchen ;) ?

Äh ja!

Ich dachte eher an
Delphi-Quellcode:
myNumber := TNumber.Create;
myNumber.FloatValue; // automatische Dereferenzierung
Gut, Delphi versteckt die Tatsache, dass man es hier überhaupt mit einem Pointer zu tun hat, aber das ist ja nur eine kleine syntaktische Abweichung. Wichtig ist, dass in Delphi/Objective-C/Java/C#/... Objekte immer über Referenzen angesprochen werden und dabei nicht dereferenziert werden müssen oder überhaupt können.

MrSpock 2. Apr 2010 16:35

Re: [objective c] Wozu * bei Objektdefinition?
 
Zitat:

Zitat von Khabarakh
Zitat:

Zitat von MrSpock
Zitat:

Zitat von Khabarakh
Zitat:

Zitat von MrSpock
Dort sieht es ja nicht mehr nach Pointer aus.

Würdest du denn in Delphi beim Aufrufen einer Methode ein ^ brauchen ;) ?

Äh ja!

Ich dachte eher an
Delphi-Quellcode:
myNumber := TNumber.Create;
myNumber.FloatValue; // automatische Dereferenzierung
Gut, Delphi versteckt die Tatsache, dass man es hier überhaupt mit einem Pointer zu tun hat, aber das ist ja nur eine kleine syntaktische Abweichung. Wichtig ist, dass in Delphi/Objective-C/Java/C#/... Objekte immer über Referenzen angesprochen werden und dabei nicht dereferenziert werden müssen oder überhaupt können.

Ja genau, das meinte ich ja. Es heißt ja nicht myNumber := ^TNumber.Create oder so.
Ich habe es aber jetzt verstanden und muss es mir einfach merken.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz