美文网首页
待解释的问题?

待解释的问题?

作者: 学习无底 | 来源:发表于2016-10-20 15:04 被阅读502次

    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 方法中,移除自己的监听,没有问题呢,难道机制有差异?

    相关文章

      网友评论

          本文标题:待解释的问题?

          本文链接:https://www.haomeiwen.com/subject/eybfuttx.html