我正在瀏覽一些舊代碼,並試圖檢測一些難以發現的錯誤。我遇到了一個UIViewController的異常用法,其中控制器被分配,存儲在一個屬性中,並且它的視圖被添加爲子視圖,而不是呈現整個控制器。非常規UIViewController用法的危險
讓我先說,我知道這是一種哈克和異常的開始。那就是說,在下面的實現中有什麼危險?是否有任何意想不到的副作用? MyOtherViewController
如果由於在某個時候收到內存警告而卸載其視圖並重新創建它,那麼會發生什麼奇怪的行爲?
我正在瀏覽一些舊代碼,並試圖檢測一些難以發現的錯誤。我遇到了一個UIViewController的異常用法,其中控制器被分配,存儲在一個屬性中,並且它的視圖被添加爲子視圖,而不是呈現整個控制器。非常規UIViewController用法的危險
讓我先說,我知道這是一種哈克和異常的開始。那就是說,在下面的實現中有什麼危險?是否有任何意想不到的副作用? MyOtherViewController
如果由於在某個時候收到內存警告而卸載其視圖並重新創建它,那麼會發生什麼奇怪的行爲?
看看顯示視圖控制器編程方式的內容
注意這一點:重要提示:切勿視圖控制器的視圖直接安裝到一個視圖層次結構。
我只是找到了一個討厭的壞EXEC墜毀在一個項目中,我搬到了(見下文討厭的錯誤)。
我可以說,使用一個UIViewController是非常糟糕的,因爲:
你必須確保控制器不釋放。該視圖不會因爲它在視圖層次結構中具有超級視圖,但控制器沒有保留它的對象。如果它被添加到窗口作爲rootController,到一個選項卡控制器,導航控制器或由另一個控制器(正常使用)呈現它可以。
它不會收到方向的變化和消息,你希望得到所謂的除了viewDidLoad中。
討厭的錯誤。例如,在iOS 5中,如果在解除模態控制器之前未釋放此控制器,那麼您將遇到BAD EXEC崩潰,這會使您發瘋。看起來,SDK中的動畫方法期望您的視圖控制器在排除模態動畫期間出現。
基本上說,從來沒有這樣做的方式,我做這件事很直接,很好找。我最終採取蘋果的「創建自定義容器視圖控制器」指南非常仔細地看,發現這裏和實施這樣的事情:https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers。 HTML#// apple_ref/DOC/UID/TP40007457-CH18-SW6 – MikeS