通知中心是什么
系统的通知中心是个单例,在整个Navigation Controller的栈区里所有的VC都可以收到,使用**[NSNotificationCenter defaultCenter]**调用
通知中心如何使用
通知有自定义通知和系统通知,通过添加观察者监测通知名称触发@SEL函数
1 | [[NSNotificationCenter defaultCenter]addObserver:(id)observer selector:(SEL)aSelector name:(nullable NSString *)aName object:(nullable id)anObject]; |
系统通知
例如系统的UITextField除了UITextFieldDelegate协议外还自带一些通知
1 | UIKIT_EXTERN NSString *const UITextFieldTextDidBeginEditingNotification; |
例如我要监控TextField文字改变
1 | [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector() name:UITextFieldTextDidChangeNotification object:nil]; |
自定义通知
如果有自定义的通知,则可以使用Post函数发出一个自定义名字的通知,通知的名字应当在静态区声明
1 | //.h |
发出自定义通知
1 | - (void)postNotification:(NSNotification *)notification; |
为什么要写UIKIT_EXTERN,因为我看系统自带的都这么写所以我也这么写,通过查询资料得知,是为了适应编译器的编译方式:
“UIKIT_EXTERN简单来说,就是将函数修饰为兼容以往C编译方式的、具有extern属性(文件外可见性)、public修饰的方法或变量库外仍可见的属性”
移除观察者
与添加观察者对应的是移除观察者
1 | - (void)removeObserver:(id)observer; |
一定要移除观察者!!!
如果在VC中添加了观察者一定要在delloc里移除观察者,不然即使NavgationController中Pop出了VC,由于单例defaultCenter仍然有一个强指针指向VC,导致VC的内存无法被回收,有可能导致内存溢出
1 | - (void)dealloc { |