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 回答