ARCでは、次のようにivarを定義すると次のようになります。
@interface ObjectA : NSObject {
id A;
}
@property(nonatomic,unsafe_unretained) id A;
Aの特性は何ですか?強いまたはunsafe_unretained?
ARCでは、次のようにivarを定義すると次のようになります。
@interface ObjectA : NSObject {
id A;
}
@property(nonatomic,unsafe_unretained) id A;
Aの特性は何ですか?強いまたはunsafe_unretained?
それはあなたがそれをどのように実装するかに依存します。あなたがそれを行うために行くことができる2つの方法があります:
@synthesize A;
またはを使用@synthesize A = __A;
する場合__unsafe_unretained
は、プロパティの所有権仕様がivar1の所有権仕様よりも優先されるためです。A
とsetA
。この場合、結果は、実装用に選択したバッキング変数の種類によって異なります。2これは、プロパティの所有権が決定される方法のルールを詳しく説明しているドキュメントへのリンクです。セクション4.1.1を参照してください。
1関連付けられたインスタンス変数がすでに存在する場合、その所有権の資格はプロパティの所有権と等しくなければなりません。それ以外の場合、インスタンス変数は[プロパティの]所有権資格で作成されます。
2プロパティの指定された所有権はそのメタデータに保持されますが、それ以外の場合、プロパティが合成されない限り、意味は純粋に従来型です。
アップルのドキュメントから:
可変修飾子
constと同じように、変数には次のライフタイム修飾子を使用します。
__strong
__weak
__unsafe_unretained
__autoreleasing
__strong
デフォルトです。オブジェクトへの強力なポインタがある限り、オブジェクトは「生きている」ままです。
__weak
参照されるオブジェクトを存続させない参照を指定します。オブジェクトへの強い参照がない場合、弱い参照はnilに設定されます。
__unsafe_unretained
参照されるオブジェクトを存続させず、オブジェクトへの強力な参照がない場合はnilに設定されない参照を指定します。参照するオブジェクトの割り当てが解除されると、ポインタはぶら下がったままになります。
__autoreleasing
参照(id *)によって渡され、戻り時に自動解放される引数を示すために使用されます。変数を正しく装飾する必要があります。オブジェクト変数宣言で修飾子を使用する場合、正しい形式は次のとおりです。