模擬場景:
- 在一個控制器a的view中添加另一個控制器b的view,如果只是把b.view添加到a.view中,會存在的問題:
- 1.重復創(chuàng)建過多的控制器b(b是局部變量,每次都會創(chuàng)建)
- 2.出現(xiàn)了不好的現(xiàn)象:控制器b已經死了(因為是局部變量,所在代碼塊結束就會死),
但是控制器的view還在(因為b.view添加到了a.view中,所以不會死),
這樣再去操作b.view上的控制事件(例如button點擊),
程序就會崩潰
- (IBAction)oneClick {
XMGOneViewController *one = [[XMGOneViewController alloc] init];
one.view.frame = CGRectMake(0, 64, self.view.frame.size.width, self.view.frame.size.height - 64);
[self.view addSubview:one.view];
}
- 如果對控制器b進行處理:定義為屬性,并且強引用,進行懶加載可以解決上面的問題,又出現(xiàn)新的問題:
3.3個控制器的view同時出現(xiàn)了(層疊了),也就是會同時繪制,渲染3個view,占用了系統(tǒng)很多資源
// 以下代碼省略了2,3控制器,只列舉了第一個
@interface ViewController ()
/** one控制器 */
@property (nonatomic, strong) XMGOneViewController *one;
@end
@implementation ViewController
- (IBAction)oneClick {
// 創(chuàng)建控制器
if (self.one == nil) {
self.one = [[XMGOneViewController alloc] init];
self.one.view.frame = CGRectMake(0, 64, self.view.frame.size.width, self.view.frame.size.height - 64);
}
// 添加控制器的view
[self.view addSubview:self.one.view];
}
@end
-
只要控制器在,控制器的view就在,因為控制器對view是強引用strong,也就是只要控制器在,就有一個強指針指向view,view就不會被銷毀,即使view被removeFromSuperView,view也不會銷毀,只是不會顯示在superView
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。