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