码迷,mamicode.com
首页 > 其他好文 > 详细

ARC下 __strong 你理解吗?

时间:2016-05-13 14:44:33      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

所有权修饰符之__strong

__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被释放. 通过赋值对象也能管理其对象的所有者

__strong 还可以这样用

@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对象

ARC下 __strong 你理解吗?

标签:

原文地址:http://blog.csdn.net/sinat_30162391/article/details/51391775

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!