1 UIViewController和UIViewController的view各自添加到不同的視圖上--->崩潰:
昨天UI布局時遇到一問題:
創建了一個UIViewController的實例對象A,在A新建了UIViewController的實例對象B,把B添加到A的子控制器中。高潮了,然后把B的視圖加到window上,每到這個地方就崩潰,信息如下:
invalid mode 'kCFRunLoopCommonModes' provided to CFRunLoopRunSpecific - break on _CFRunLoopError_RunCalledWithInvalidMode to debug. This message will only appear once per execution.
不知道什么情況,若把B的視圖添加到A的視圖上,沒有問題。待解釋。
2 使用KVO時遇到移除監聽時崩潰
我在控制器實例對象A中創建了一個NSObject對象b,設置為A的屬性,在b中對A使用了KVO,在b的 dealloc 方法中移除了監聽,當從A返回上一級頁面時,程序崩潰,崩潰信息同上。
若在A的 dealloc 移除對A的監聽,沒有問題。
嘗試過在b的 dealloc 方法中調用A中的方法移除監聽,還是照舊。
分析:
b是在A的 dealloc 執行過程中釋放的,也就是說A的 dealloc 方法開始執行了,b的 dealloc 才會執行。
猜測:
調用移除監聽方法并不會立即執行(有可能是異步的,也有可能在下一次runloop時執行),代碼順序執行,當移除監聽方法實際執行時,移除監聽的對象已經釋放。
但為什么在自己的 dealloc 方法中,移除自己的監聽,沒有問題呢,難道機制有差異?