现在的位置: 首页 > 综合 > 正文

Delegate and Protocol

2013年03月10日 ⁄ 综合 ⁄ 共 1096字 ⁄ 字号 评论关闭
  1. 我们通过发送消息给对象出发特定动作;对象发送某些变化的时候通过回调函数(callback)通知我们。对象在特定事件发生的时候,就会调用对应的回调函数,触发业务逻辑。
  2. 回调函数通过所谓的代理(Delegation)来实现.

委托(delegate)-------益处:

¨         它更为简洁的把程序的逻辑处理从UIApplication中分离了出来。

¨         它避免了程序员直接从UIApplication派生子类,试想如果通过从UIApplication派生子类的方法来管理应用程序的生命周期和系统事件是多么痛苦的一件事情。


  “委托模式中一般有两个对象参与处理同一个请求,所谓的请求在iPhone中就是应用程序的生命周期和系统事件,接受请求的对象将请求委托给另一个对象来处理,同样在iPhone中对应的是UIApplication在接收到生命周期和系统事件后委托给UIApplicationDelegate来处理。


  iPhone不采用继承体系而采用委托模式来实现聚合的原因,其更深层次在于iPhone框架的多样化使得继承无法保证子类行为的一致性,而委托模式恰恰是为了弥补继承的这个缺点诞生的。


  每个项目都会有一个UIApplication对象来处理应用程序的生命周期和系统事件,main()函数通过UIApplicationMain()来初始化应用程序的UIApplication,如果想对应用程序的UIApplication进行操作,就只能通过[UIApplication sharedApplication]来获取到UIApplication的引用,这个方法会返回一个全局唯一UIApplication对象给读者。


  同样,读者可以通过如下代码获取应用程序的委托对象:UIApplicationDelegate* myDelegate = [[UIApplication sharedApplication] delegate];


协议 Protocol :

  object-c 里没有多继承。那么又要避免做出一个对象什么都会(super class monster,huge
,super,waste)一个超能对象 本身是否定了面向对象的概念和真谛了。为了让代码更简洁,条理更清楚,可以将部分职责分离。

  协议本身没有具体的实现。只规定了一些可以被其它类实现的接口。

  delegate 总是被定义为 assign @property

  1. @interface UITextField  
  2. @property (assign) id<UITextFieldDelegate> delegate;  
  3. @end 

抱歉!评论已关闭.