web-dev-qa-db-de.com

Was ist der Unterschied zwischen "schwach" und "zuweisen" in der Delegate-Eigenschaftsdeklaration?

Was ist der Unterschied zwischen diesem:

@property (nonatomic, weak) id  <SubClassDelegate> delegate; 

und das:

@property (nonatomic, assign) id  <SubClassDelegate> delegate; 

Ich möchte Eigenschaft für Delegierte verwenden.

85
Firdous

Der einzige Unterschied zwischen weak und assign besteht darin, dass der Wert des Zeigers weak gesetzt wird, wenn das Objekt, auf das eine Eigenschaft von weak verweist, freigegeben wird auf nil setzen, damit Sie nie Gefahr laufen, auf Müll zuzugreifen. Wenn Sie assign verwenden, geschieht dies nicht. Wenn Sie also die Zuordnung des Objekts aufheben und versuchen, darauf zuzugreifen, greifen Sie auf Garbage zu.

Wenn Sie sich bei Objective-C-Objekten in einer Umgebung befinden, in der Sie weak verwenden können, sollten Sie diese verwenden.

151
yuji