标签:
__strong 修饰符是id类型和对象类型默认的所有权修饰符.
// 自己生成并持有对象
id obj = [[NSObject alloc] init];
id __strong obj1 = [[NSObject alloc] init];
__strong id obj2 = [[NSObject alloc] init];
解释:
1.1 上面三个对象为强引用
1.2 一旦超出其作用域将会失效
1.3 自动释放自己持有的对象
// 非自己生成并持有的对象
__strong id obj3 = [NSMutableArray array]; // 跟上面的情况相同
// 稍微复杂一点的强引用的例子
__strong id obj4 = [[NSObject alloc] init]; // A
__strong id obj5 = [[NSObject alloc] init]; // B
__strong id obj6 = nil; // 不持有对象
obj4 = obj5; // 1. obj4持有的A对象强引用失效. 2. obj4 持有由obj5赋值 B对象强引用. 对象A被释放3. s现在持有B对象的有 obj4和 obj5
obj6 = obj4; // obj6 也持有B对象
// 分别指向空
obj4 = nil;
obj5 = nil;
obj6 = nil; // 导致B对象没有持有者, B被释放. 通过赋值对象也能管理其对象的所有者
@interface Test : NSObject
{
__strong id obj7_;
}
- (void)setobject:(__strong id)obj7;
@end
@implementation Test
- (instancetype)init
{
self = [super init];
return self;
}
- (void)setobject:(id)obj7
{
obj7_ = obj7;
}
@end
__strong id vc = [[Test alloc] init];
[vc setobject:[[NSObject alloc] init]]; // obj7_ 持有NSObject对象
标签:
原文地址:http://blog.csdn.net/sinat_30162391/article/details/51391775