注意weak属性的坑

在 ARC 模式下,我们申明一个weak属性:

@property (weak, nonatomic) UIView *testView;

然后创建并添加视图:

_testView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
[self.view addSubview:_testView];

如果工程较小的话,比如我写的demo,会给警告:

屏幕快照 2017-07-11 上午10.50.03.png

但如果你的项目很大,可能不会出现警告,这就坑了。你在debug模式下,这个视图是正常的,但如果切到release模式下,这个视图可能就不显示了!

解决方法:

1、将weak改成strong;
2、先申明一个临时变量,如下:

UIView *tempView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
[self.view addSubview:tempView];
_testView = tempView;

方法二其实是先用临时变量强持有新分配的View内存,然后addSubview会再强持有1次,所以就算临时变量过了函数作用域,视图也会被一直持有的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 面试题参考1 : 面试题[http://www.cocoachina.com/ios/20150803/12872...
    江河_ios阅读 1,757评论 0 4
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,209评论 30 471
  • 重点掌握 3 类对象和方法 对象就是一个物体 类的独特存在就是一个实例,对实例进行操作叫做方法。方法可以应用于类或...
    Coder大雄阅读 1,281评论 0 2
  • 把网上的一些结合自己面试时遇到的面试题总结了一下,以后有新的还会再加进来。 1. OC 的理解与特性 OC 作为一...
    AlaricMurray阅读 2,610评论 0 20
  • 01 你设定的标准决定了你的人生。 这句话第一次是从永澄老师那儿听来的,在我的潜意识里默默的沉淀着。最近在写文章的...
    繁华静语阅读 435评论 0 1