待解釋的問題?

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 方法中,移除自己的監聽,沒有問題呢,難道機制有差異?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.埋點是做什么的 2.如何進行埋點 3.埋點方案的設計 近期常被問到這個問題,我擔心我的答案會將一些天真爛漫的孩...
    lxg閱讀 2,029評論 0 1
  • __block和__weak修飾符的區別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,364評論 0 6
  • 面向對象的三大特性:封裝、繼承、多態 OC內存管理 _strong 引用計數器來控制對象的生命周期。 _weak...
    運氣不夠技術湊閱讀 1,135評論 0 10
  • 1.自定義控件 a.繼承某個控件 b.重寫initWithFrame方法可以設置一些它的屬性 c.在layouts...
    圍繞的城閱讀 3,469評論 2 4
  • http://www.devstore.cn/essay/essayInfo/6525.html【原文地址】 序言...
    起名好難_fz閱讀 670評論 1 1