1

ここで、インスタンス変数が__strongデフォルトで有効になっていることを簡単に説明します。これは、次のことを意味しますか。

@interface Foo {
    Bar *test; // implicitly __strong
}
@property (nonatomic, unsafe_unretained) Bar *test;
@end

と呼び出し

test = [[Bar alloc] init];

実装ファイルで、新しいBarインスタンスが保持されますか?はいの場合 Bar、プロパティがARCに触れないように指示していることを考慮して、Fooの割り当てが解除されたときに、インスタンスはまったく解放されますか?

4

1 に答える 1

2

それをコンパイルしようとしましたか?うまくいきません。プロパティに関連付けられた ivar には、プロパティと同じ所有権修飾子が必要です。これはClang ARCドキュメントにあります:

関連付けられたインスタンス変数が既に存在する場合、その所有権の修飾はプロパティの所有権と等しくなければなりません。それ以外の場合、インスタンス変数はその所有権修飾で作成されます。

@interface Digby : NSObject 
{
    NSString * wiska;
}

@property (unsafe_unretained) NSString * wiska;

@end

@implementation Digby

@synthesize wiska;    // Existing ivar 'wiska' for property 'wiska' with unsafe_unretained attribute must be __unsafe_unretained

@end

明示的な ivar 宣言を削除すると、合成された ivar は__unsafe_unretainedプロパティのようになります。

于 2012-05-14T18:09:42.133 に答える