IOS Delegate & protocal
总结一下:
delegate是一个方式,程序组成单元之间分工的一种协调思想
protocal 这个东西不能单独说,要与它相关的两个主要东西一起说,一个是 委托者 通常是VIEW, 一个是被委托者 通常是某个CONTROLLER
它主要用来预先定义出来一个协议,可以理解为TCP/IP协议的思想,大家即 服务端、客户端 都按这个TCP/IP的协议规范来 沟通。
既然把它叫一个协议,那它一定有一个明确具体的定义,定义它有什么功能,即行为,或叫干什么事。
这个所谓的干什么事,就是预先定义出来,给委托者调用(由被委托者实现,协议只是定义一个行为的名字和相应的参数及类型),定义也定义好了。
下面就是,被委托者FOLLOW这个协议,然后实现它。委托者就可以设置自己的委托人是人,就是设置被委托人的引用到自己的DELEGATE属性上。
anyController.delegate = self. SELF这个类里去实现协议方法。
那么委托者有了具体的委托人了,就可以有效的进行调用 这个协议里预先定义过的方法了。
委托者在类定义的头文件中也需要声明好一个 DELEGATE的属性 (@PROPERTY ID<PROTOACALNAME> delegate 这种形式)。
那这样一个有机的配合机制就出来了,这几者之间的一个明确的协调工作方式就完成了。
即,VIEW & CONTROLLER 双方都遵守了 PROTOCAL协议,如同服务端 与 客户端都 遵循实现了 TCP/IP协议
//-----------------------------------------------------------------------------------------------------------------Concolusion
PROTOCAL 用来定义预期的行为 @protocal { -(void)method_name;} @end
VIEW用来调用PROTOCAL定义的行为, 调用形式即 [view.delegate method_name_defined_in_protoal];
CONTROLLER用来实现PROTOCAL定义的行为,且,CONTROLLER被设置为VIEW的DELEGATE。即传引用给CONTROLLER的DELEGATE属性。 view.delegate = self;
会让整个程序模块功能之间的协作很清晰,它不是唯一的好方式,但确是一种好方式。
IOS Delegate & protocal的更多相关文章
- iOS delegate, 代理/委托与协议.
之前知知道iOS协议怎么写, 以为真的跟特么java接口一样, 后来发现完全不是. 首先, 说说应用场景, 就是当你要用一个程序类, 或者说逻辑类, 去控制一个storyboard里面的label, ...
- [iOS]delegate和protocol
转自:http://haoxiang.org/2011/08/ios-delegate-and-protocol/ 今天上班和同事讨论工程怎么组织的时候涉及到这个话题.iOS开发上对delegate使 ...
- iOS delegate
有两个scene,分别为Scene A和Scene B.Scene A上有一个UIButton(Button A)和一个UILable(Lable A):Scene B上有一个UITextFiled( ...
- ios delegate你必须知道的事情
在我们的class中设计delegate的时候,我们通常会有几个注意事项. 假设我的class叫做MyClass,那我们可能会有定义一个MyClassDelegate这个protocol当作我的del ...
- ios delegate, block, NSNotification用法
ios中实现callback可以通过两种方法,委托和NSNotification 委托的话是一对一的关系,例如一个UIViewController里有一个tableView, 将该viewContro ...
- ios delegate 代理模式 观察者模式 不同视图间的通信
delegate,在ios中比比皆是,NSURLConnection(网络请求有),tableView, connectionView,等系统自带 的常见代理.甚至,自己写代码的时候,随意间敲打出了p ...
- iOS 之美:iOS Delegate 使用五步曲
在iOS 开发中, 搞清楚Delegate 是需要花些时间的. Delegate 本来是软件架构设计的一种理念.对于像手机这样一个有限的设备,我们需要充分考虑到:内存要尽量省着用: 视图之间的关系要清 ...
- 转:ios delegate
首先,大家应该都明白的是委托是协议的一种,顾名思义,就是委托他人帮自己去做什么事.也就是当自己做什么事情不方便的时候,就可以建立一个委托,这样就可以委托他人帮自己去实现什么方法. 其次,我简单的总结了 ...
- ios delegate 使用注意 assign,weak
今天一个同事写代码,把一个delegate对象设定成了assign类型属性,没有用weak,就是delegate对象释放后,不会把delegate指针自动设定为nil,把对象的delegate设定成了 ...
随机推荐
- 多浏览器兼容flv视频播放HTML
HTML: <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http: ...
- npm package 装包匹配原则
经常看到package.json 里面有这样的devDependencies: "devDependencies": { "@angular/common": ...
- Centos 6.5安装python3.5.1
查看python的版本 #python -V Python 2.6.6 1.下载Python-3.5.1 #wget https://www.python.org/ftp/python/3.5.1/ ...
- php 常用设计模式详解
1.单例模式 构造函数必须为private 一个保存类实例静态成员变量 拥有一个访问这个实例的公共静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到 ...
- 部署应用程序脚本+GUIRunOnce命令
部署应用程序脚本: 应用程序配置:运行脚本(cmd.exe): 可执行程序:cmd.exe 参数: /c net user ppc boc.123 /add 运行方式账户: NT AUT ...
- pod install warning
warning: Insecure world writable dir /usr/local/bin in PATH, mode 040777 解决方法: sudo chmod 775 /usr/l ...
- 批量导出表数据到CSV文件
需求:把oracle数据库中符合条件的N多表,导出成csv文本文件,并以表名.csv为文件名存放. 实现:通过存储过程中UTL_FILE函数来实现.导出的csv文件放入提前创建好的directory中 ...
- 异步消息总线hornetq学习-03客户端连接hornet进行jms消息的收发-非jndi方式连接
在上节中介绍了通过jndi方式连接到hornetq服务器上,有时候由于某些原因,我们不希望通过jndi方式连接,hornetq也支持这种方式进行 以第2章节的例子为模板,我们编写了另一个获取Conne ...
- php实现网页标签补全方法(转)
导读:PHP在生成静态文件的时候,有时候会因为一些混编问题让HTML标签不完整或混乱而导致页面混乱.作者分享下面这段小代码可以非常方便解决问题. 如果你的网页内容的html标签显示不全,有些表格标签不 ...
- 分享一个jQuery动态网格布局插件:Masonry(转)
在线演示 Masonry是 一款非常强大的jQuery动态网格布局插件,可以帮助开发人员快速开发类似剪贴画的界面效果.和CSS中float的效果不太一样的地方在 于,float先水平排列,然后再垂直排 ...