作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
基本上,我有一个 view1,它在某个时候调用 view2(通过 presentModalViewController:animated:
)。当按下 view2 中的某个 UIButton
时,view2 会调用 view1 中的通知方法,然后立即关闭。通知方法弹出警报。
通知方法工作正常并被适当调用。问题是,每次创建 view1(一次只应存在一个 view1)时,我大概会创建另一个 NSNotification
,因为如果我从 view0(菜单)转到 view1,然后返回并返回来回几次,我从通知方法中收到一系列相同的警报消息,一个接一个,就像我打开 View 1 一样。
这是我的代码,请告诉我我做错了什么:
View1.m
-(void) viewDidLoad {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(showAlert:)
name:@"alert"
object:nil];
}
-(void) showAlert:(NSNotification*)notification {
// (I've also tried to swap the removeObserver method from dealloc
// to here, but it still fails to remove the observer.)
// < UIAlertView code to pop up a message here. >
}
-(void) dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super dealloc];
}
View2.m
-(IBAction) buttonWasTapped {
[[NSNotificationCenter defaultCenter] postNotificationName:@"alert"
object:nil];
[self dismissModalViewControllerAnimated:YES];
}
-(void) dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super dealloc];
}
最佳答案
调用 -dealloc
不会在 View Controller 被关闭后自动发生——在 View Controller 的生命周期中仍然会有一些“生命”。在该时间范围内,该 View Controller 仍订阅该通知。
如果您在 -viewWillDisappear:
或 -viewDidDisappear:
中移除观察者,这将产生更直接的效果:
- (void) viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:@"alert"
object:nil];
}
关于ios - removeObserver with NSNotification...我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3328210/
我是一名优秀的程序员,十分优秀!