本文共 2267 字,大约阅读时间需要 7 分钟。
每一个iOS应用程序都有一个专门的通知中心(NSNotificationCenter)实例,负责协助不同对象之间的消息通信。这个机制符合观察者模式(Observer Pattern),允许任何对象向通知中心发布通知(NSNotification),而其他感兴趣的对象(观察者)可以在特定通知发布时接收到此通知。
一个通知通常包含以下三个属性:
通过以下方法可以初始化一个通知:
+ (instancetype)notificationWithName:(NSString *)aName object:(id)anObject;+ (instancetype)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;- (instancetype)initWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo;
通知中心提供了多种方法来发布通知:
- (void)postNotification:(NSNotification *)notification;- (void)postNotificationName:(NSString *)aName object:(id)anObject;- (void)postNotificationName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;
通知中心允许注册通知监听器(Observer),通过以下方法可以实现:
- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject;- (id)addObserverForName:(NSString *)name object:(id)obj queue:(NSOperationQueue *)queue usingBlock:(void (^)(NSNotification *note))block;
在取消注册监听器前,需确保已从通知中心移除注册:
- (void)removeObserver:(id)observer;- (void)removeObserver:(id)observer name:(NSString *)aName object:(id)anObject;
通常在监听器的析除阶段(如 dealloc 方法)取消注册:
- (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self];} 通过 UIDevice 类获取设备信息:
+ (UIDevice *)currentDevice;
常见通知名称:
UIDeviceOrientationDidChangeNotificationUIDeviceBatteryStateDidChangeNotificationUIDeviceBatteryLevelDidChangeNotificationUIDeviceProximityStateDidChangeNotification键盘状态改变时,系统会发布以下通知:
UIKeyboardWillShowNotificationUIKeyboardDidShowNotificationUIKeyboardWillHideNotificationUIKeyboardDidHideNotificationUIKeyboardWillChangeFrameNotificationUIKeyboardDidChangeFrameNotification附加信息(字典)包括:
UIKeyboardFrameBeginUserInfoKeyUIKeyboardFrameEndUserInfoKeyUIKeyboardAnimationDurationUserInfoKeyUIKeyboardAnimationCurveUserInfoKeyNotificationCenter 是iOS开发中的重要工具,通过发布通知和注册监听器,实现多对象间的高效通信。理解其原理和应用,对于开发实践至关重要。
转载地址:http://mynfk.baihongyu.com/