做了一年的iOS,想记录自己对知识点的一点理解。

  第一篇,想记录一下iOS中delegate(委托,也有人称作代理)的理解吧。

  故名思议,delegate就是代理的含义, 一件事情自己不方便做,然后交给其他人去帮助实现, 比如A、B两个类,A的一个对象有一个任务aTask要在B类中实现,任务无法在A类本身中实现,所以要交给B类帮忙,则A和B约定一个协议:

A类:

   @protocol ADelegate <NSObject>  
   -(void)aTask;   //协议的一个方法   @end   //代理属性,同时约定作为代理的对象必须实现ADelegate协议   @property (nonatomic,assign) id <ADelegate> aDelegate; //属性用assign不用retain是为了避免循环引用

B类:

  B类中,B类继承A的代理,表示同意该协议,以后我们就按说好的办事了:

  //继承A的代理协议

@interface B () <ADelegate>

 @end

  B用一个事件,比如按钮点击,在点击方法onBButtonClicked里触发任务:

   //按钮点击
  -(void)onBButtonClicked{    //在B类中,初始化一个A类的对象aObj = [[A alloc] init];
   AViewController *aObj = [[AViewController alloc] init];    //指定A类的代理,这事就交给aObj你去做了。
   aObj.aDelegate = self;    //判断_aDelegate实例是否实现了aTask方法     //避免未实现aDelegate的类也作为A的监听
   if([A.aDelegate respondsToSelector:@selector(aTask)]){
   //_viewDelegate对象调用代理方法触发任务
  [A.aDelegate aTask];    NSLog(@"excute A`s aTask");
  }   }   //在代理方法里实现A所交代的任务
  -(void)aTask{    //具体任务内容
   NSLog(@"aTask is execute.");
  }

小demo: DelegateDemo.zip

补充: 1.在协议@Protocol里,有些方法不一定都需要实现,可以根据需求添加一些关键字来标记方法的重要性,比如

    @required //必须实现的方法
    @optional //可选实现的方法
     2.协议可以扩展自另一个协议,aDelegate就扩展自NSObject;
   3.协议中不能定义属性、成员变量等,只能定义方法;
   4. (2016-01-30补充)代理也经常用在页面跳转时候的传递value中,在点击按钮跳转的时候,用代理传值。
 如果存再多个代理,可以使用respondsToSelector方法判断哪个代理是否相应该代理方法。
if ([_delegate respondsToSelector:@selector(sendValue:)]){}  引论:
   事实上在ObjC中协议的更多作用是用于约束一个类必须实现某些方法,而从面向对象的角度而言这个类跟接口并不一定存在某种自然关系,
可能是两个完全不同 意义上的事物,这种模式我们称之为代理模式(Delegation)。在Cocoa框架中大量采用这种模式实现数据和UI的分离,
而且基本上所有的协议都 是以Delegate结尾。
参考链接:
     1. http://blog.csdn.net/jianxin160/article/details/47753189     2. http://www.apkbus.com/forum.php?mod=viewthread&tid=137785

      3.  http://www.cocoachina.com/ios/20150112/10880.html

iOS 的一点理解(一) 代理delegate的更多相关文章

  1. iOS基础 - UITableView的数据源(dataSource)和代理(delegate)

    UITableView的数据源(dataSource)和代理(delegate) UITableView需要一个数据源(dataSource)来显示数据,UITableView会向数据源查询一共有多少 ...

  2. RxSwift 入坑好多天 - 终于有了一点理解

    一.前言 江湖上都在说现在就要赶紧学 swift 了,即将是 swift 的天下了.在 api 变化不大的情况下,swift 作为一门新的语言,集众家之所长,普通编码确实比 oc 要好用的多了 老早就 ...

  3. 协议(Protocol) 和代理(Delegate)

    1.概念与组成 delegate是iOS中一种常见的设计模式,是一种消息传递的的方式,常见的消息传递方式还有以下几种: 通知:在iOS中由通知中心进行消息接收和消息广播,是一种一对多的消息传递方式. ...

  4. gslb(global server load balance)技术的一点理解

    gslb(global server load balance)技术的一点理解 前言 对于比较大的互联网公司来说,用户可能遍及海内外,此时,为了提升用户体验,公司一般会在离用户较近的地方建立机房,来服 ...

  5. opencv笔记5:频域和空域的一点理解

    time:2015年10月06日 星期二 12时14分51秒 # opencv笔记5:频域和空域的一点理解 空间域和频率域 傅立叶变换是f(t)乘以正弦项的展开,正弦项的频率由u(其实是miu)的值决 ...

  6. 对socket的一点理解笔记

    需要学web service,但是在视频中讲解到了socket套接字编程.以前貌似课上老师有提过,只是没用到也感觉乏味.现在遇到,自己看了些博客和资料.记录一点理解,不知正确与否. 首先说这个名字,叫 ...

  7. 关于web开发的一点理解

    对于web开发上的一点理解 1 宏观上的一点理解 网页从请求第地址 到获得页面的过程:从客户端(浏览器)通过地址 从soket把请求报文封装发往服务端   服务端通过解析报文并处理报文最后把处理的结果 ...

  8. angular.js的一点理解

    对angular.js的一点理解 2015-01-14 13:18 by MrGeorgeZhao, 317 阅读, 4 评论, 收藏, 编辑 最近一直在学习angular.js.不得不说和jquer ...

  9. rt-thread中动态内存分配之小内存管理模块方法的一点理解

    @2019-01-18 [小记] rt-thread中动态内存分配之小内存管理模块方法的一点理解 > 内存初始化后的布局示意 lfree指向内存空闲区首地址 /** * @ingroup Sys ...

随机推荐

  1. [OC Foundation框架 - 15] NSDate

    日期处理类 定义 时间间隔计算 时间比较,返回其一 时间格式化 void dateCreate() { //date return current time NSDate *date = [NSDat ...

  2. 【Android】JSONArray的合并

    在Android开发过程中,需要处理解析服务器JSON数据时,或需要进行两个或多个JSONArray合并操作. 比如在进行LIstView的动态更新时. 在此提供一种JSONArray合并的方法,方便 ...

  3. WinForm中如何判断关闭事件来源于用户点击右上角的“关闭”按钮

    在C#的WinForm程序中,有的时候需要判定关闭请求从哪里发出来的.比如是用户点击了右上角的“关闭”按钮,还是调用了WinForm.Close()方法.最典型的是要知道点击右上角的“关闭”按钮发出的 ...

  4. 通过Wifi调试Android应用

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  5. ant中调用外部ant任务的两种方法

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  6. ASP终极防下载(转)

    自从搞ASP+ACCESS没少为避免数据库下载而伤过神,网上的奇淫技巧更是数不胜数,本文就是同大家共同探讨各路前辈的留下的秘笈并指中其中的优劣,最后为大家提供一种最佳的解决方案. 一.开篇 自从搞AS ...

  7. 看文章《EAI和SOA的比较》有感(1)

    <EAI和SOA的比较>http://www.cnblogs.com/asdling/archive/2007/11/26/973100.html这篇文章写的很全面,至少自己这么认为,也解 ...

  8. 2014-2015 ACM-ICPC, Asia Xian Regional Contest G The Problem to Slow Down You 回文树

    The Problem to Slow Down You Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjud ...

  9. iOS开发——开发技巧&Mac常用命令

    现实和隐藏文件拓展名 显示:defaults write com.apple.finder AppleShowAllFiles Yes && killall Finder 隐藏:def ...

  10. PERCONA-TOOLKIT 工具文档

    https://www.percona.com/doc/percona-toolkit/2.2/index.html