码迷,mamicode.com
首页 > 移动开发 > 详细

ios晋级之路-强引用和弱引用

时间:2015-09-01 16:42:49      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

在objective-c的ARC模式中,请看以下代码

id objc =[[NSObject alloc]init];

这里id默认为强引用

在强引用中,有时会出现循环引用的情况,这时就需要weak来帮忙啦

int main(int argc, const char * argv[]) {

    id __weak obj0 = nil;

    @autoreleasepool {

        if (YES) {

            id obj1 = [[NSObject alloc]init];

            obj0 = obj1;

            NSLog(@"%@",obj0);

        }

        NSLog(@"%@",obj0);

    }

    return 0;

}

打印结果:

2015-09-01 15:30:25.640 强引用测试[2166:153376] <NSObject: 0x100211f20>

2015-09-01 15:30:25.642 强引用测试[2166:153376] (null)

因为obj1生成的默认的为强引用(__strong),在超出if的作用域之后,obj1所持有的对象被释放,
obj0为弱引用,所以obj0不持有对象,在obj1对象释放后,obj0自动的被赋值为nil
弱引用的特性是,不持有对象,即便是写成id __weak obj1 = [[NSObject alloc] init];
此代码系统会给与警告,因为这里obj1被声明成弱引用,那么在赋值之后,alloc出来的对象会被立即释放。

ios晋级之路-强引用和弱引用

标签:

原文地址:http://www.cnblogs.com/fanxinguu/p/4775843.html

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