IOS开发-小白进阶-通知中心

消息中心

什么事消息中心呢?个人理解为他就像一个广播,他发送一个消息,在所有添加监听的地方都能收到此信息,并根据相应的需求来完成动作,范围更广大美功能相对而言也更强大。每一个应用程序中都会有一个通知中心用来专门负责协助不同对象间的消息通信。

解决的问题

举个例子来说明,比如说我有五个View每个View上有一个按钮,现在我想点击一个A页面上的按钮然后他会隐藏,同时其他四个页面B,C,D,E上的按钮也要隐藏。这时候我们就可以在点击A页面的时候向通知中心发布一个通知,然后B,C,D,E接受到这个通知的时候就会把按钮隐藏。这时候我们可以称A为发布通知者,B,C,D,E可以称为通知接受者。


消息机制的步骤:

添加消息中心监听:

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(setUserInfo:)
                                                 name:@"SetUserInfo" object:nil];
addobserver:监听者,即谁要接受这个通知。(self 自己)

selector:收到通知后,回调监听的方法,并把对象当作参数传入。(setUserInfo)

name:通知的名称。如果为空。那么无论通知的名称是什么,监听者都会收到这个通知                                  userInfo:<#(NSDictionary *)#>];

发送消息

[[NSNotificationCenter defaultCenter]postNotificationName:(NSString *)
                                                   object:(id)
                                                 userInfo:(NSDictionary *)];

postNotficationName:消息通知的名字

object;消息的发送者

回调函数的处理:

- (void) setUserInfo:(NSNOtification*) aNotification
{
      doSomeThing;
}
观察者注销

    [[NSNotificationCenter defaultCenter] removeObserver:(id)
                                                    name:(NSString *)
                                                  object:(id)]
可以说在iOS引入ARC以后,我们不注销也不会出错,但是注销有利于性能跟内存。所以尽量注销。

与delegate的区别

看见一篇博客上写的非常好所以就直接移植过来。可以一起参考

delegate的优势:

  1. 非常严格的语法,所有的时间必须在delegate协议中有清晰的定义。
  2. 如果delegate中的一个方法没有实现那么就会出现编译警告或错误。
  3. 协议必须在controller的作用域范围内定义。
  4. 在一个应用中的控制流程是可跟踪的并且是可识别的。
  5. 在一个控制器中可以定义多个不同的协议,每个协议有不同的delegates
  6. 没有第三方对象要求保持/监视通信过程。
  7. 能够接受调用方法的返回值。这意味着得了噶特能够提供反馈信息给cpontroller。
delegate的不足:
  1. 需要定义很多的代码:1)协议定义。2)controller的delegate的属性。3)在delegate本身中实现delegate方法。
  2. 在释放代理对象时,需要小心的将delegate改为nil。一旦设定失败,那么调用释放对象的方法会出现内存crash。
  3. 在一个controller中有多个delegate对象,并且delegate遵守一个协议,但是还是很难告诉多个对象同一个事件,不过有可能。
notifition的优势:
  1. 不需要编写多少代码,实现比较简单。
  2. 对于一个发出的通知,多个对象能够能做出反应,即一对多实现简单。
  3. controller能够传递context对象(dictionary), context对象携带了关于发送通知的自定义的信息
notifition的不足:
  1. 在编译期不会检查通知是否能够被观察者正确的处理。
  2. 在释放注册的对象时,需要在通知中心中取消注册。
  3. 在调试的时候应用的工作以及控制过程难跟踪。
  4. 需要第三方对喜爱的那个来管理conctroller与观察者对象之间的联系。
  5. ccontroller和观察者需要提前知道通知明晨,UserInfo dictionary keys。如果这些没有在工作区间定义那么会出现不同步的情况。
  6. 通知发出后,controller不能从观察者获得任何的反馈信息。
感谢那位大神的博客写的这么详细,我就偷偷的引用来莫怪。其实在实际编码中我门还是需要不断的积累经验才能很好的区分,现在只是知道知识点还是不够的腰多写多练。共勉。



标题基于Python的自主学习系统后端设计与实现AI更换标题第1章引言介绍自主学习系统的研究背景、意义、现状以及本文的研究方法和创新点。1.1研究背景与意义阐述自主学习系统在教育技术领域的重要性和应用价值。1.2国内外研究现状分析国内外在自主学习系统后端技术方面的研究进展。1.3研究方法与创新点概述本文采用Python技术栈的设计方法和系统创新点。第2章相关理论与技术总结自主学习系统后端开发的相关理论和技术基础。2.1自主学习系统理论阐述自主学习系统的定义、特征和理论基础。2.2Python后端技术栈介绍DjangoFlask等Python后端框架及其适用场景。2.3数据库技术讨论关系型和非关系型数据库在系统中的应用方案。第3章系统设计与实现详细介绍自主学习系统后端的设计方案和实现过程。3.1系统架构设计提出基于微服务的系统架构设计方案。3.2核心模块设计详细说明用户管理、学习资源管理、进度跟踪等核心模块设计。3.3关键技术实现阐述个性化推荐算法、学习行为分析等关键技术的实现。第4章系统测试与评估对系统进行功能测试和性能评估。4.1测试环境与方法介绍测试环境配置和采用的测试方法。4.2功能测试结果展示各功能模块的测试结果和问题修复情况。4.3性能评估分析分析系统在高并发等场景下的性能表现。第5章结论与展望总结研究成果并提出未来改进方向。5.1研究结论概括系统设计的主要成果和技术创新。5.2未来展望指出系统局限性并提出后续优化方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值