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设定成了 ...
随机推荐
- cookie 编码问题
问题描述: Control character in cookie value or attribute. 解决方案: 1.前台编码 encodeURIComponent(str) 2.后台解码 原 ...
- jq简单选项卡
function tabControl(obj,elm){ $(obj).hover(function(){ $(this).addClass('active').siblings().removeC ...
- Unity3D细节整理:AssetBundle对应的各种格式文件的类型
我们打包AssetBundle后,Unity3D会根据文件的后缀名将文件转换为特定的类型对象存储起来,我们后期获取时需要根据这些类型取出打包的数据,这里记录下不同后缀文件打包后的类型. 文本格式 支持 ...
- ASP导出Word带页眉页脚,中文不乱码
关键代码: <% Response.Clear() Response.CodePage= Response.Charset="UTF-8" Response.ContentT ...
- shell脚本的入参
shell脚本参数可以任意多,但只有前9个可以被访问,使用shift命令可以改变这个限制.参数从第一个开始,在第九个结束.$0 程序名字$n 第n个参数值,n=1..9 $* 所有命令行参数$@ ...
- android常见错误-E/AndroidRuntime(13678): java.lang.NoClassDefFoundError:
08-01 11:09:39.791: E/AndroidRuntime(13678): FATAL EXCEPTION: main 08-01 11:09:39.791: E/AndroidRunt ...
- quartz 2.2.1 jdbc 连接池参数配置
/** The JDBC database driver. */指定连接驱动 public static final String DB_DRIVER = "driver"; /* ...
- 从零开始学习Hadoop--第1章 Hadoop的安装
Hadoop的安装比较繁琐,有如下几个原因:其一,Hadoop有非常多的版本:其二,官方文档不尽详细,有时候更新脱节,Hadoop发展的太快了:其三,网上流传的各种文档,或者是根据某些需求定制,或者加 ...
- ApiDemo/FragmentRetainInstance 解析
/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Versi ...
- visualvm连接服务器jvm进行监控
本地环境,mac: 服务器环境ubuntu: 直接运行jstatd命令,提示 Could not create remote object access denied ("java.util ...