也许这是一种不好的做法,但是从我读过的文档中,我得到的建议是在某些情况下在viewDidLoad方法中初始化对象,并在viewDidUnload方法中将其nil。
例如,如果你有像添加观察者这样的东西。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(filterready:)
name:@"filterReady"
object:nil];
现在我没有一种方法来移除Observer,然而每次显示视图时都会调用viewDidLoad,这导致在一段时间后有多个观察者运行并且选择器被调用多次。
我可以通过将某些清理工作移到viewDidDisappear方法中来解决这个问题,但现在我对自己所做的是否正确有些怀疑。
在我的示例中,我有多个导航控制器来控制它们的子导航,但是即使它们没有被引用,dealloc也从未被调用。
viewDidUnload
只有在由于内存警告而卸载视图时才会被调用。如果你在viewDidLoad
中添加了一个观察者,并且只在viewDidUnload
中删除它,那么很多时候你将在没有删除它的情况下被释放。这将在通知中心中留下一个悬空指针,几乎肯定会导致以后崩溃。 - Tommyview.window
是否为nil
。 - Groxxif ([self isViewLoaded] && self.view.window)
。 - Mike Weller