Wann sollte ich das Schlüsselwort "self" verwenden?

8

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 ?

verwenden?     
binnyb 02.11.2010, 17:43
quelle

6 Antworten

7

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:

  • Beliebige init Methode.
  • In 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.

    
Max Seelemann 02.11.2010, 19:03
quelle
8

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.

    
jer 02.11.2010 17:45
quelle
6

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.

    
Ben Scheirman 02.11.2010 17:50
quelle
5

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%     
lewiguez 02.11.2010 17:51
quelle
1

Wenn Sie die Variable "synthetisieren", sollten Sie "self". Die Variable. kleine Faustregel

    
theiOSDude 09.03.2011 13:05
quelle
0

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.

    
Vilx- 02.11.2010 17:48
quelle

Tags und Links