随便提到here实例变量默认启用__strong
- 这是否意味着拥有:
@interface Foo {
Bar *test; // implicitly __strong
}
@property (nonatomic, unsafe_unretained) Bar *test;
@end
并致电
test = [[Bar alloc] init];
在实现文件中,是否会保留新的Bar
实例?如果是,当Foo被释放时,Bar
实例是否会被释放,考虑到该属性告诉ARC不要触摸它?
答案 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
,就像属性一样。