在 ARC 模式下,我们申明一个weak属性:
@property (weak, nonatomic) UIView *testView;
然后创建并添加视图:
_testView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
[self.view addSubview:_testView];
如果工程较小的话,比如我写的demo,会给警告:
但如果你的项目很大,可能不会出现警告,这就坑了。你在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次,所以就算临时变量过了函数作用域,视图也会被一直持有的。