IOS中不同组件的通信
来源:互联网 发布:知错改错善莫大焉 编辑:程序博客网 时间:2024/06/05 09:38
一、iOS中两种方式实现不同组件的通信,一种是松耦合的方式,一是紧耦合的方式。
1、NSNotifacationCenter让应用中内不同组件以松耦合的方式进行通信。
(1)注册、删除监听者
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mytest:) name:@" mytest" object:nil];
参数介绍:
addObserver: 观察者,即在什么地方接收通知;
selector: 收到通知后调用何种方法;
name: 通知的名字,也是通知的唯一标示,编译器就通过这个找到通知的。
移除observer
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"postData" object:nil];
(2) 发送通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"mytest" object:searchFriendArray];
参数:
postNotificationName:通知的名字,也是通知的唯一标示,编译器就通过这个找到通知的。
object:传递的参数
2、delegate让应用中不同组件以紧耦合的方式进行通信。
当A组件需要监听B组件的事件或处理B组件的状态改变时,A实现B组件内部的delegate协议,并将A组件设置为B组件的delegate属性。
二、他们的区别又是什么呢?
Delegate:
消息的发送者(sender)告知接收者(receiver)某个事件将要发生,delegate同意然然后发送者响应事件,delegate机制使得接收者可以改变发送者的行为。通常发送者和接收者的关系是直接的一对多的关系。
Notification:
消息的发送者告知接收者事件已经发生或者将要发送,仅此而已,接收者并不能反过来影响发送者的行为。通常发送者和接收者的关系是间接的多对多关系。
1. 效率肯定是delegate比nsnotification高。
2. delegate方法比notification更加直接,最典型的特征是,delegate方法往往需要关注返回值,也就是 delegate方法 的结果。比如-windowShouldClose:,需要关心返回的是yes还是no。所以delegate方法往往包含should这个很传神的词。 也就是好比你做我的delegate,我会问你我想关闭窗口你愿意吗?你需要给我一个答案,我根据你的答案来决定如何做下一步。相反 的,notification最大的特色就是不关心接受者的态度,我只管把通告放出来,你接受不接受就是你的事情,同时我也不关心结果。所以 notification往往用did这个词汇,比如NSWindowDidResizeNotification,那么nswindow对象放出这个 notification后就什么都不管了也不会等待接受者的反应。
1)两个模块之间联系不是很紧密,就用notification传值,例如多线程之间传值用notificaiton。
2)delegate只是一种较为简单的回调,且主要用在一个模块中,例如底层功能完成了,需要把一些值传到上层去,就事先把上层的函数通过 delegate传到底层,然后在底层call这个delegate,它们都在一个模块中,完成一个功能,例如 说 NavgationController 从 B 界面到A 点返回按钮 (调用popViewController方法) 可以用delegate 比较好。
- IOS中不同组件的通信
- Delphi for iOS开发指南(4):在iOS应用程序中使用不同风格的Button组件
- Delphi for iOS开发指南(4):在iOS应用程序中使用不同风格的Button组件
- iOS 中几种不同通信模式的优缺点
- vue非父子组件通信 (两个不同的组件通信)
- 串口通信中不同电平的解决
- 5、Reactjs中组件之间的通信
- Angular中组件间的通信
- iOS平台下实现不同APP之间的通信
- iOS平台下实现不同APP之间的通信
- iOS平台下实现不同APP之间的通信
- iOS平台下实现不同APP之间的通信
- iOS中不同view的创建方法
- 关于Asp.net中调用不同版本的Excel组件.
- Android中Intent连接不同组件的原理
- EventBus 同一进程中不同组件间的通讯
- Android中Intent连接不同组件的原理
- Android中使用AIDL完成不同进程间的通信
- OCP 1Z0 053 47
- android.os.Environment
- 使用服务做守护进程
- Orthogonal matching pursuit
- rz
- IOS中不同组件的通信
- android-getTextSize返回值是以像素(px)为单位的,setTextSize()以sp为单位
- Lua中的table函数库
- linux下安装mysql非安装版mysql-5.1.73-linux-i686-glibc23.tar.gz
- 网络爬虫基本原理(一)
- Linux内核模块编程与内核模块LICENSE -《详解(第3版)》预读
- Alex 的 Hadoop 菜鸟教程: 第1课 hadoop体系介绍
- Qt 向word中插入文字
- 指尖凝情,淺寫幸福