在我的应用程序中,我会收听键盘通知:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow)
name:UIKeyboardWillShowNotification
object:nil];
我刚删除了导致我的应用程序崩溃的错误
我有一个带有UI的模态视图(每次呈现时都会被销毁并重新创建。
在我添加这行代码之前,我第二次使用它时遇到了崩溃:
[[NSNotificationCenter defaultCenter] removeObserver:self];
任何人都知道为什么不删除已解除分配对象的观察者会导致崩溃?
答案 0 :(得分:3)
这是因为当您收到通知时,如果您没有以观察者的身份删除您的类,它仍会尝试调用该方法。但是,由于该对象已完全取消分配并销毁,因此您将获得EXC_BAD_ACCESS。
答案 1 :(得分:1)
在类的dealloc方法中删除任何观察者是个好主意。否则,通知将发送到不再存在的对象,该对象崩溃。
答案 2 :(得分:1)
NSNotificationCenter
维护对可能已取消或可能未解除绑定的对象的引用。崩溃发生在第二次,因为NSNotificationCenter不知道旧的UIViewController已经完全释放。