AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [objective c] Wozu * bei Objektdefinition?
Thema durchsuchen
Ansicht
Themen-Optionen

[objective c] Wozu * bei Objektdefinition?

Ein Thema von MrSpock · begonnen am 2. Apr 2010 · letzter Beitrag vom 2. Apr 2010
Antwort Antwort
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#1

[objective c] Wozu * bei Objektdefinition?

  Alt 2. Apr 2010, 12:31
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?
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#2

Re: [objective c] Wozu * bei Objektdefinition?

  Alt 2. Apr 2010, 13:21
Pointer?
Marcel
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#3

Re: [objective c] Wozu * bei Objektdefinition?

  Alt 2. Apr 2010, 13:43
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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#4

Re: [objective c] Wozu * bei Objektdefinition?

  Alt 2. Apr 2010, 14:57
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
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#5

Re: [objective c] Wozu * bei Objektdefinition?

  Alt 2. Apr 2010, 15:13
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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#6

Re: [objective c] Wozu * bei Objektdefinition?

  Alt 2. Apr 2010, 16:02
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 .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#7

Re: [objective c] Wozu * bei Objektdefinition?

  Alt 2. Apr 2010, 17:03
Zitat von Khabarakh:
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 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 .
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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#8

Re: [objective c] Wozu * bei Objektdefinition?

  Alt 2. Apr 2010, 17:25
Zitat von MrSpock:
Zitat von Khabarakh:
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.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#9

Re: [objective c] Wozu * bei Objektdefinition?

  Alt 2. Apr 2010, 17:35
Zitat von Khabarakh:
Zitat von MrSpock:
Zitat von Khabarakh:
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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz