Wann sollte ich den Ausdruck self
in meinen iPhone-Entwicklungsanwendungen verwenden? sag ich habe 2 felder: UITextField *text1;
und NSString *str1;
beibehalten und synthetisiert.
Wenn ich auf eines dieser beiden Felder zugreife, wann sollte ich und wann nicht self.text1
und self.str1
?
In bestimmten Fällen wird generell davon abgeraten, den self.
-Ausdruck für den Zugriff auf eine Eigenschaft zu verwenden. Normalerweise verwenden Sie immer self
für den Zugriff von a Eigentum. Es ist die sicherste und unkomplizierteste Art und Weise. Vor allem, wenn Sie beibehalten haben, wird die Speicherverwaltung für Sie erledigt.
Die zwei Ausnahmen von dieser Regel:
init
Methode. dealloc
. In beiden Fällen handelt es sich um ein teilweise initialisiertes Objekt. Es gibt einige Nebenwirkungen, die auftreten können, wenn Sie hier Setter oder Getter verwenden - weil sie Methoden sind und daher überschrieben werden können.
Zum Beispiel , nimm eine Klasse A
mit einer Eigenschaft foo
, die von der Klasse B
unterklassifiziert wurde. Die Unterklasse B
fügt eine Eigenschaft bar
hinzu und überschreibt den Setter für foo
. Jetzt ruft Ihre init
-Methode setFoo:
auf, weil Sie self.foo = ...
mit einem Anfangswert verwendet haben. Die Unterklasse greift jedoch auch auf den Wert von bar
in diesem Setter zu. Aber in diesem Fall kann es vorkommen, dass der Balken nie initialisiert wurde und auf beliebige Daten zeigt. Beim Aufruf eines Setter in init stürzt meine Ursache ab , obwohl die Wahrscheinlichkeit in Ihrem eigenen Code möglicherweise nicht zu hoch ist.
self
ist kein Schlüsselwort, es ist ein Ausdruck. Darüber hinaus verwenden Sie es jederzeit, wenn Sie auf eine Methode oder Eigenschaft auf sich selbst oder auf sich selbst verweisen möchten. Mit "selbst" beziehe ich mich natürlich auf die Instanz der Klasse, in der Sie arbeiten.
In Ihrem Beispiel greifen Sie nicht direkt auf Instanzvariablen zu, wenn Sie self
verwenden, stattdessen greifen Sie auf die von Ihnen definierten Eigenschaften zu.
Betrachten Sie dieses Beispiel:
%Vor%Im Allgemeinen, wenn Sie Eigenschaften verwenden, gibt es wenig Grund, den ivar zu verwenden. Dies hat den zusätzlichen Vorteil, dass & amp; Freigeben von Werten für Sie.
Aber andere Fälle existieren, wenn Ihre Eigenschaften einen readonly
-Modifikator haben. In diesen Fällen müssen Sie direkt auf Ihre Ivars zugreifen, um ihre Werte festzulegen.
Es ist auch eine gute Idee, self
manchmal innerhalb eines Methodenaufrufs zu verwenden, wenn Sie einen benutzerdefinierten Getter haben. Das managedContext
-Objekt innerhalb einer Core Data-Using-Anwendung ist ein gutes Beispiel. Wenn Sie sich auf self.managedContext
beziehen, können Sie das Objekt überschreiben und auf das setzen, was es sein muss, wenn es nil
ist. Lesen Sie den Code, der von XCode generiert wird, wenn Sie eine Anwendung erstellen, die Core Data verwendet.
Hier ist ein Beispiel für den von XCode erzeugten Code:
%Vor%Wenn Sie die Variable "synthetisieren", sollten Sie "self". Die Variable. kleine Faustregel
Ich weiß nichts über objective-c, aber das sieht sehr ähnlich wie this
keyword aus anderen Sprachen aus (wie C ++, C #, Java, PHP und andere). Wenn ja, dann ist mein Rat, es immer zu benutzen. Wenn Sie also (versehentlich) eine lokale Variable mit demselben Namen definieren, wird Ihr Code nicht unterbrochen.
Allerdings muss ich hinzufügen, dass dies eine Art religiöser Debatte mit einer Geschichte von Flammenkriegern in Programmiergemeinden ist. Also nimm diesen Rat mit einem Körnchen Salz und nutze alles, was dir am meisten Sinn macht. Sei nur konsequent darüber.
Tags und Links objective-c iphone ios self