addSubview和rootViewController區別

如果你把一個view添加到主視圖中去有兩種方式:


(1)直接將控制器的view添加到UIWindow中,並不理會它對應的控制器

[self.window  addsubview:MyView.view];

(2)設置uiwindow的根控制器,自動將rootviewcontroller的view添加到window中,負責管理rootviewcontroller的生命週期

[self.window.rootviewcontroller=MyView];

 

兩個方法的區別:

以後的開發中,建議使用(2).因爲方法(1)存在一些問題,比如說控制器上面可能由按鈕,需要監聽按鈕的點擊事件,如果是1,那麼按鈕的事件應該由控制器來進行管理。但控制器是一個局部變量,控制器此時已經不存在了,但是控制器的view還在,此時有可能會報錯。注意:方法執行完,這個控制器就已經不存在了。

問題1:當view發生一些事件的時候,通知控制器,但是控制器已經銷燬了,所以可能出現未知的錯誤。

問題2:添加一個開關按鈕,讓屏幕360度旋轉(兩者的效果不一樣)。當發生屏幕旋轉事件的時候,UIapplication對象會將旋轉事件傳遞給uiwindow,uiwindow又會將旋轉事件傳遞給它的根控制器,由根控制器決定是否需要旋轉

UIapplication->uiwindow->根控制器(第一種方式沒有根控制器,所以不能跟着旋轉)。

提示:不通過控制器的view也可以做開發,但是在實際開發中,不要這麼做,不要直接把view添加到UIWindow上面去。因爲,難以管理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章