是什么?
- 一个完整的通知,包含3个属性:
@property (readonly, copy) NSNotificationName name; @property (nullable, readonly, retain) id object; @property (nullable, readonly, copy) NSDictionary *userInfo;
name
通知的名称,
object
通知发布者(是谁要发布通知,可以是'监听者')
userInfo
用户信息字典(通知发布者传递给通知接收者 [监听者] 的信息内容) -
NSNotificationName
其实是NSString *
的别名!
typedef NSString *NSNotificationName;
怎么使用?
-
+ notificationWithName: object:
返回具有指定名称和对象的新通知对象+ (instancetype)notificationWithName:(NSNotificationName)aName object:(id)anObject
-
+ notificationWithName: object: userInfo:
返回具有指定名称,对象和用户信息的通知对象+ (instancetype)notificationWithName:(NSNotificationName)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;
-
- init
初始化一个空的通知。 -
- initWithCoder:
使用未归档的程序(如 plist文件)的数据, 来初始化通知
- (instancetype)initWithCoder:(NSCoder *)coder
-
- initWithName: object: userInfo:
使用指定的名称,对象和用户信息初始化通知- (instancetype)initWithName:(NSNotificationName)name object:(id)object userInfo:(NSDictionary *)userInfo
示例代码
- 代码如下 :
//注册监听器(监听者:p1,监听所有对象发布的所有通知,监听到通知后,调用getMessage:方法) [[NSNotificationCenter defaultCenter] addObserver:p1 selector:@selector(getMessage:) name:nil object:nil]; //创建通知 (通知发布者:compAL/compJD,创建名称为'notificationWithName'的通知) NSNotification * noteALText = [NSNotification notificationWithName:alNoteTest object:compAL userInfo:@{@"title":@"Ara you OK"}]; NSNotification * noteALTemp = [NSNotification notificationWithName:alNoteTemp object:compAL]; NSNotification * noteJDText = [[NSNotification alloc]initWithName:jdNoteName object:compJD userInfo:@{@"noneTitle":@"JD come on"}]; //发布通知 [[NSNotificationCenter defaultCenter] postNotification:noteALText]; [[NSNotificationCenter defaultCenter] postNotification:noteALTemp]; [[NSNotificationCenter defaultCenter] postNotification:noteJDText];
-(void)getMessage:(NSNotification *)note{ NSLog(@"%@,接收到%@发送的%@,消息内容是:%@",self.name,[note.object name],note.name,note.userInfo); }
- 输出结果 :
张三,接收到阿里巴巴发送的军事新闻-通知,消息内容是:{ title = "Ara you OK"; } 张三,接收到阿里巴巴发送的民生新闻-通知,消息内容是:(null) 张三,接收到京东发送的717消费券-通知,消息内容是:{ noneTitle = "JD come on"; }
也可以看看
NSNotificationCenter - 通知中心
模拟通知
来自于哪里?
- iOS-MJ-UI基础-大神班/day-11/05-模拟通知
网友评论