為什么要用父子控制器

模擬場(chǎng)景:

  • 在一個(gè)控制器a的view中添加另一個(gè)控制器b的view,如果只是把b.view添加到a.view中,會(huì)存在的問題:
    • 1.重復(fù)創(chuàng)建過多的控制器b(b是局部變量,每次都會(huì)創(chuàng)建)
    • 2.出現(xiàn)了不好的現(xiàn)象:控制器b已經(jīng)死了(因?yàn)槭蔷植孔兞?所在代碼塊結(jié)束就會(huì)死),
      但是控制器的view還在(因?yàn)閎.view添加到了a.view中,所以不會(huì)死),
      這樣再去操作b.view上的控制事件(例如button點(diǎn)擊),
      程序就會(huì)崩潰
- (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];
}
  • 如果對(duì)控制器b進(jìn)行處理:定義為屬性,并且強(qiáng)引用,進(jìn)行懶加載可以解決上面的問題,又出現(xiàn)新的問題:
    3.3個(gè)控制器的view同時(shí)出現(xiàn)了(層疊了),也就是會(huì)同時(shí)繪制,渲染3個(gè)view,占用了系統(tǒng)很多資源
// 以下代碼省略了2,3控制器,只列舉了第一個(gè)
@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就在,因?yàn)榭刂破鲗?duì)view是強(qiáng)引用strong,也就是只要控制器在,就有一個(gè)強(qiáng)指針指向view,view就不會(huì)被銷毀,即使view被removeFromSuperView,view也不會(huì)銷毀,只是不會(huì)顯示在superView
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 《裕語(yǔ)言》速成開發(fā)手冊(cè)3.0 官方用戶交流:iApp開發(fā)交流(1) 239547050iApp開發(fā)交流(2) 10...
    葉染柒丶閱讀 28,703評(píng)論 5 20
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,716評(píng)論 25 709
  • 最近一段時(shí)間,我們這兒秋收已經(jīng)結(jié)束,那些為人父母的又開始外出打工。前幾天,我戲謔的叫她小豆豆的李慶鴻在日記里寫道:...
    向日葵3閱讀 697評(píng)論 1 1
  • 可能大家都有在初中或高中喜歡上一個(gè)人的經(jīng)歷吧,我喜歡一個(gè)人,他不普通,也不特殊。我在初一報(bào)道的時(shí)候看見了他,最后我...
    DLGE閱讀 329評(píng)論 0 0
  • 甘南行的微信群里我把因事未能成行的小芳夫婦也加進(jìn)來了,群里十個(gè)人,五對(duì)夫妻。幾十年的風(fēng)風(fēng)雨雨,患難與共。友情至此已...
    慧眼jj閱讀 289評(píng)論 0 3

友情鏈接更多精彩內(nèi)容