mar*_*cus 12 iphone objective-c ios
我只是偶然关于我的应用程序的一个问题:我测试了didReceiveMemoryWarning
呼叫转移至UIViewController
包括后续的呼叫viewDidUnload
.
这曾经在我的应用程序的旧版本中正常工作,但现在在iPhone模拟器中无法正常工作:
didReceiveMemoryWarning
不再被调用.
这是通过调用造成[NSNotificationCenter defaultCenter] removeObserver:self]
的viewWillDisappear
(自我作为的UIViewController)来注销了一些生命周期通知我并在补充viewDidAppear
.
该全局removeObserver:
调用不仅删除了我添加的通知,而且显然系统的UIApplicationDidReceiveMemoryWarningNotification通知也导致didReceiveMemoryWarning
调用UIViewController .
这种行为是设计的吗?我找不到一个指出的参考/文档,removeObserver:
在UIViewController 中调用会破坏标准的memoryWarning处理.
XJo*_*nes 16
是的,这是设计的.
这种行为一点也不让我感到惊讶.UIViewController中的实现是不透明的,所以没有办法确切知道它是注册的实例为UIApplicationDidReceiveMemoryWarningNotification
与didReceiveMemoryWarning
行动,但肯定会有意义.
作为一般规则,[[NSNotificationCenter defaultCenter] removeObserver:self]
在任何地方使用都是不好的做法dealloc
.这是因为,正如您所发现的,在超类实现中可能存在不可预测的副作用.如果您遵循仅针对您注册的特定通知取消注册的约定,则可以更加可预测且更容易调试/维护代码.
归档时间: |
|
查看次数: |
5889 次 |
最近记录: |