2013-05-09 4 views
13

In Obj-C können Eigenschaften als schwach/stark konfiguriert werden. Instanzvariablen wie folgt -iVars verweist stark, schwach oder was?

@interface MyClass { 
NSObject *a; 
} 

schwachen Verweis auf a oder stark, oder etwas anderes tut Gegenstand der MyClass der halten? Ich denke, dass iVar erst freigegeben wird, wenn das Objekt veröffentlicht wurde. Warum spezifizieren wir nicht schwach/stark für iVar-ähnliche Eigenschaften?

Antwort

13

der Standardreferenz Ivar ist __strong, wenn Sie es ausdrücklich


+0

Gibt es eine Möglichkeit, die Ivar als Kopie oder zuordnen zu erklären? – JoJo

1
@interface MyClass { 
__weak NSObject *a; 
__strong NSObject *a; 
__unsafe_unretained NSObject *obj; 
} 
10

Sie Frage hat mich inspiriert sein __weak oder __strong gesetzt und ich habe Speicherverwaltung eine tiefe Suche nach objektiven c. Ich würde gerne etwas mit dir teilen, das ich von Apple Doc bekommen habe.

Standardverhalten von Instanzvariable

Instanz Variable verfügt über eine starke Bezugnahme auf die Objekte standardmäßig

Warum wir für iVar ähnliche Eigenschaften schwach/strong nicht angeben?

Lokale Variablen und Nicht-Eigenschaften-Instanzvariablen enthalten standardmäßig starke Referenzen auf Objekte. Das Attribut strong muss nicht explizit angegeben werden, da es sich um den Standardwert handelt.
Eine Variable behält nur dann eine starke Referenz auf ein Objekt bei, wenn diese Variable im Gültigkeitsbereich liegt oder bis sie einem anderen Objekt oder nil zugewiesen wird.

Wenn Sie nicht über eine Variable, die einen starken Bezug halten möchten, können Sie es als __weak erklären, wie folgt aus:

NSObject * __weak weakVariable; 
Verwandte Themen