Halli Hallo,
ein weiteres mal...ich hoffe ich störe mit meinen Fragen ein letztes Mal, aber aller Anfang ist schließlich schwer
Ich bin weiterhin am Objective-C 3.0 programmieren und lernen und habe mich jetzt schon ein ganzes Stück mit Properties und co. beschäftigt.
Allerdings hackt es irgendwo bei mir ein wenig, irgendwas schmeiße ich da - so glaube ich - durcheinander, langsam bin ich verwirrt.
Eine Property kann ich öffentlich in der .h Datei der Klasse oder privat in einem privaten Interface in der .m Datei erzeugen. Bei letzterem kann ich im öffentlichen Interface dann sagen, inwieweit die Property, welche vorher in der privaten .m Datei angelegt wurde, zugegriffen werden darf (zum Beispiel mit readonly, um den Wert einer Property auszulesen).
Durch das erzeugen einer eigenen Property (nennen wir sie im Folgenden einfach mal "Level") erzeugt XCode automatisch eine Getter und Setter Methode, sowie eine Instanzvariable.
Um nun IN DER DEKLARATION (sprich vor allem in der .m Datei) auf die Property zuzugreifen, mache ich dies über "self.level = 10" (als Beispiel), richtig?
Um nun auf die Instanzvariable, welche automatisch angelegt wurde, direkt zuzugreifen, nutze ich "_level = 10", richtig?
Meine Frage und Verwirrung: Wann sollte ich auf die Property und wann auf die Instanzvariable direkt zugreifen? Ist da ein Unterschied oder ist das egal?
Wenn ich nun einen Initialisierer schreibe, sähe der so aus:
- (id) initWithLevel: (int) level {
self = [super init]
if (self) {
_ level = level;
}return self }
In dem If-Block greife ich nun ja auf _level, also direkt auf die Instanzvariable zu. Könnte ich auch theoretisch über "self.level" auf die Property zugreifen?
Macht das überhaupt einen Unterschied oder ist das egal?
Um nun in der main.m auf die Methode zuzugreifen nutze ich ja "[MeineKlasse meineMethode]".
Um dort aber auf die Property bzw. dessen Variable, die zum Beispiel den Level speichert, zuzugreifen nutze ich "meinObjekt.level = 10" richtig?
Alternativ könnte ich auch die von X Code selbst erzeugte Setter Methode aufrufen, um dem Objekt einen Wert zuzufügen...
Damit ich nun aber bei meinem Objekt nicht immer "meinObjekt.Property = x" schreiben muss, baue ich einen Initialisierer, wo ich quasi alles direkt in einem Abwasch eingeben kann, oder?
Wie dem auch seie, meine Hauptfrage geht eben auf die Instanzvariable und Property zurück. Ich bin vor allem verwirrt, wann und wieso ich auf die Property und wann auf die Instanzvariable zugreifen soll. Im Endeffekt wird doch bei beidem der selbe Wert gleich gespeichert, oder?
Warum sollte bzw. kann ich darüberhinaus noch weitere Instanzvariablen, ohne das Erzeugen eines Properties, anlegen?
Ich bin leicht verwirrt, sorry dafür und danke für die Hilfe im Voraus!