在需要监听某件事情或者传值我们可能会想到通知这种模式,但是在ARC环境下仍需要对监听者处理,不然会可能发生错误,notificationCenter (监听的创建是一种单例模式),首先使用通知会有一个广播post和一个观察者addobserve,首先我们要在用到的地方注册一个通知来接受传递的值:
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(registration:) name:@"registration" object:nil];
}
-(void)registration:(NSNotification *)noti{
NSDictionary *dic = noti.userInfo;
NSLog(@"dic:%@",dic);
}
如果我们是在viewDidLoad中注册的通知,一般会在
-(void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
移除这个通知,因为通知是很占内存的,防止内存泄漏而导致程序崩溃。
这中移除是看在哪里添加的通知,只要在这个视图view或者控制器viewController被释放之前把这个通知移除就好了。
我就在移除通知的时候遇到过坑,在视图被释放了,可是通知还在,导致了程序的崩溃,而且最让人头疼的是,这种情况在控制台可能不会被答应出来!!在移除通知一定要懂得代码执行的顺序,进行操作。今天还遇到了一个坑,就是我们有一个测试版本和一个appstore版本,写入的代码每次都在测试版本上运行测试了,然而打了一个appstore的测试版本后一些文件没有勾选appstore版本,那么可想而知缺少的文件是多么的让人蛋疼。正确应该是这样的。
然而没有勾选
那么就炸了!一定要注意!
明天写一写iOS10的本地推送。