Benutzerdefinierter Setter für die Kopiereigenschaft in objective-c

8

Muss ich das Objekt in custom setter mit der Eigenschaft copy in objective-c manuell kopieren? Zum Beispiel

Ich habe eine Eigenschaft:

%Vor%

und benutzerdefinierter Setter:

%Vor%

Ist es Option 1 genug für benutzerdefinierte Setter oder muss ich stattdessen Option 2 verwenden, um Objekt kopiert zu haben?

    
razor28 16.04.2014, 07:56
quelle

4 Antworten

4

Sie können tun, was Sie wollen, aber Sie sollten die zweite Option verwenden. Das liegt daran, dass es so etwas wie Codedokumentation sein wird, wenn andere Entwickler es sehen, dass sie wissen, dass Sie die Zeichenfolge kopieren, indem Sie einfach Folgendes betrachten:

%Vor%

Das gleiche gilt, wenn Sie "retain / assign" verwenden, um das Objekt im benutzerdefinierten Setter beizubehalten bzw. zuzuweisen. Dadurch wird Ihr Code klarer, dokumentierter und für andere Entwickler viel verständlicher.

    
Greg 16.04.2014, 08:01
quelle
1

Sie müssen "Option 2" verwenden, da Sie für Ihre Eigenschaft und Anweisung "copy" verwenden:

%Vor%

würde ein neues Objekt im Speicher erstellen und es Ihrem Eigenschaftenobjekt zuweisen.

    
Hashim Khan 16.04.2014 08:13
quelle
1

Wenn Sie einen eigenen benutzerdefinierten Setter schreiben, sind Sie für alles, was er tut, zu 100% verantwortlich. In Ihrem Fall sind Sie zu 100% für den Fehler verantwortlich, den Sie mit der Option 1 Ihres Codes einleiten: Wenn ich afterObject.someString auf eine veränderbare Zeichenfolge setzen und die Zeichenfolge später ändern, ändert sich die Zeichenfolge in Ihrem Objekt, was am sichersten ist nicht was Sie von einer Kopiereigenschaft erwarten.

Wenn Sie außerdem einen benutzerdefinierten Setter und Getter (oder einen benutzerdefinierten Getter für eine schreibgeschützte Eigenschaft) haben, sodass kein vom Compiler generierter Getter oder Setter vorhanden ist, erstellt der Compiler die Instanzvariable nicht für Sie. Sie müssen das selbst tun.

Sie sollten auch bemerken, dass "Kopieren" von unveränderlichen Objekten sie nicht wirklich kopiert, sondern sie nur behält, so dass normalerweise die "Kopier" -Operation wirklich billig ist, und wenn ich ein veränderbares Objekt passiere, war "Kopie" höchstwahrscheinlich Was du sowieso wolltest.

    
gnasher729 16.04.2014 09:45
quelle
-2

Gehen Sie mit Option 2 vor, wenn Sie einen eigenen Setter erstellen möchten, aber vergessen Sie nicht, die Bedingung vor der Anweisung hinzuzufügen, wie ...

%Vor%

Hinweis: - Im Falle von ARC verwenden Sie stattdessen die Anweisung " _someString = nil " von " [_someString release] ";

    
Shankar Prasad 16.04.2014 09:30
quelle

Tags und Links