Objective-C中的老板是这样发通知的(Notification)

简介:

    ​    ​通知(Notification)简单的类比一下,公司的老总给下面的员工发通知啦,说明天公司要上市,各部门做一下准备工作。等通知发完,各部门收到后各司其职,做着自己该做的东西。假如Boss是通过公司的内部论坛发送的通知,那么Boss就是发送通知的对象,而公司员工就是通知的接受方,而公司的内部论坛就是通知中心,员要想接收到Boss发送的通知的前提是先在论坛上注册一下。老板只有一个,而接受通知的有多个部门,老板是通过论坛广播的形式发送的通知。说的高大上一点,通知是一种发送给一个或多个观察着,用来通知其在程序中发生了某个事件的消息。Cocoa中的通知及时遵循的是一种广播的模式。

    ​    ​暂且这么类比着,这是根据我个人理解而想出的例子,可能会有不足之处,希望大家批评指正,转载请注明出处。

    ​    ​废话少说,我们如何把上面boss通过论坛发帖的形式来发送通知用Objective-C中的Notification来实现呢,代码走起

    ​    ​1.一个公司得有老板对吧,所以我们要新建一个老板类,公司的内部论坛就是我们OC中的通知中心(NotificationCenter),看完老板的实现代码在说两句吧

@implementation Boss
-(void)sendMessage
{
    //把要发送的信息放入字典中(boss要在论坛中说的话)
    NSDictionary *message = @{@"notification" : @"大家注意啦,明天公司上市!"};
     
    //创建通知对象(老板登陆boss账号)
    NSNotification * notification = [NSNotification notificationWithName:@"boss" object:self userInfo:message];
     
    //向通知中心发送消息(发布消息)
    [[NSNotificationCenter defaultCenter] postNotification:notification];
     
}
@end

    ​    ​代码说明:

    ​    ​    ​    ​1.老板要发的消息要放在字典中才能发布,字典的key是帖子的主题,value是帖子的内容

    ​    ​    ​    ​2.创建通知对象就好比老板登陆内部论坛,用notificationWithName设置老板的昵称

    ​    ​    ​    ​3.向通知中心发送消息就是老板发帖啦

 

    ​2.下面我们就开始模拟各个部门接受通知后要做的事情,人力资源部接到通知后要做的事儿

@implementation HumanResources
- (instancetype)init
{
    self = [super init];
    if (self) {
        //现在通知中心注册,确定要接受谁的消息,(登陆论坛,关注老板)
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doSomething:) name:@"boss" object:nil];
    }
    return self;
}
 
-(void)doSomething:(NSNotification *)notification
{
     
    //接受消息,(从论坛上看到啦boss的消息)
    NSDictionary *bossInfo = [notification userInfo];
    //输出收到的信息
    NSLog(@"人力资源部门收到:%@", bossInfo[@"notification"]);
}
 
 
@end

    ​代码说明:

    ​    ​1.注册为观察者相当于各部门要在内部论坛注册并关注老板,在关注老板的同时指定当老板发送通知时自己要做些什么事儿

    ​    ​2.doSomething里是各部门要做的事情

   

    ​3.再添加一个财务部,和上面的代码类似,在这就不写了

    ​4.在main函数里做如下的测试

Boss * boss = [[Boss alloc] init];
Finance * finance = [[Finance alloc] init];
HumanResources *hr = [[HumanResources alloc] init];
//老板发消息啦
[boss sendMessage];

    ​当老板发通知时,各部门会自动调取自动执行的方法,运行结果如下:
2014-08-20 15:10:29.816 Memory[1946:303] 财务部门收到:大家注意啦,明天公司上市!
2014-08-20 15:10:29.817 Memory[1946:303] 人力资源部门收到:大家注意啦,明天公司上市!

最后呢,也是最重要的,登录完论坛如果你不使用了,要注销也就是要退出。那么通知也是一样的,你需要在dealloc方法中移除观察者即可。

​    上面的总结暂且这么说吧,是根据笔者自己的理解所总结的内容,不免有偏颇之处,欢迎批评指正。

相关文章
|
6月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
351 2
|
4月前
|
开发工具 iOS开发 容器
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错
iOS Objective-C 应用连接Azure Storage时,若不关闭账号的匿名访问,程序能正常运行。但关闭匿名访问后,上传到容器时会出现错误:“Public access is not permitted”。解决方法是将创建容器时的公共访问类型从`AZSContainerPublicAccessTypeContainer`改为`AZSContainerPublicAccessTypeOff`,以确保通过授权请求访问。
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错
|
6月前
|
缓存 开发工具 iOS开发
优化iOS中Objective-C代码调起支付流程的速度
优化iOS中Objective-C代码调起支付流程的速度
88 2
|
6月前
|
安全 JavaScript 前端开发
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
248 0
|
iOS开发 容器
iOS 代码规范格式 Objective-C(上)
iOS 代码规范格式 Objective-C
427 0
iOS 代码规范格式 Objective-C(上)
|
编译器 API iOS开发
iOS 代码规范格式 Objective-C(下)
iOS 代码规范格式 Objective-C(下)
233 0
|
机器学习/深度学习 API iOS开发
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(一)
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(一)
177 0
|
存储 自然语言处理 Java
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(二)
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(二)
247 0
|
存储 安全 C语言
【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态(一)
【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态(一)
196 0
|
自然语言处理 Go iOS开发
iOS开发者知识普及,Swift 挑战 Objective-C,谁会笑到最后?
如果你的公司也正计划跟随 iOS 软件开发,那么你需要作出一个至关重要的决定。你需要为你的产品选择合适的技术组合。你的目标是什么?如果是原生应用开发而不是跨平台软件,你会选用哪种编程语言?久经考验的 Objective-C 还是 Swift?