在 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次,所以就算臨時變量過了函數作用域,視圖也會被一直持有的。