ARC:ivar赋值是否受属性属性的影响?

时间:2012-05-14 11:35:54

标签: objective-c automatic-ref-counting

随便提到here实例变量默认启用__strong - 这是否意味着拥有:

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

并致电

test = [[Bar alloc] init];

在实现文件中,是否会保留新的Bar实例?如果是,当Foo被释放时,Bar实例是否会被释放,考虑到该属性告诉ARC不要触摸它?

1 个答案:

答案 0 :(得分:2)

你有没有尝试编译?它不会起作用。与财产相关联的ivar必须与财产具有相同的所有权限定符。这是Clang ARC doc

  

如果关联的实例变量已存在,则其所有权限定必须等于该属性的所有权;否则,将使用该所有权限定创建实例变量。

@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,就像属性一样。