首页 > 移动平台 > 详细

iOS 代理设计模式

时间:2017-01-10 17:24:51      阅读:206      评论:0      收藏:0      [点我收藏+]

在项目中经常会用到代理的设计模式,这是iOS中一种消息传递的方式,也可以通过这种方式传递一些参数.

在项目中,刚开始我是用一些代理来传递参数的,但是慢慢觉得代理的代码比较block多,所以就更多的使用了block.

前几天突然想到了代理的设计模式,回头翻看了下,

protocol--协议

  协议是公共的定义,如果只是某个类使用,我们常做的就是写在某个类中。如果是多个类都是用同一个协议,建议创建一个Protocol文件,在这个文件中定义协议。遵循的协议可以被继承,例如我们常用的UITableView,由于继承自UIScrollView的缘故,所以也将UIScrollViewDelegate继承了过来,我们可以通过代理方法获取UITableView偏移量等状态参数。

  协议可以继承其他协议,并且可以继承多个协议,在iOS中对象是不支持多继承的,但是协议可以.

代理对象 --

  代理对象在很多情况下其实是可以复用的,可以创建多个代理对象为对个委托方服务.

代理内存管理

  delegate的属性都是用weak,因为strong类型的指针会造成强引用,必定会影响一个对象的生命周期,这也就会形成循环引用.

  weak和assign是一种"非拥有关系"的指针,通过这两种修饰符修饰的指针变量,都不会改变被引用对象的引用计数.但是在一个对象被释放后,weak会自动将指针指向nil,而assign则不会.在iOS中,向nil发送消息时不会导致崩溃的,所以assign就会导致野指针的错误unrecognized selector sent to instance。

 

代理和block的选择

  在多个消息传递时应该使用delegate.这个时候的block不便于维护而且臃肿.

  一个委托对象的代理属性只能有一个代理对象,如果想要委托对象调用多个代理对象的回调应该用block.

  代理是可选的,而block在方法调用的时候只能通过将某个参数传递一个nil进去.

iOS 代理设计模式

原文:http://www.cnblogs.com/ritian/p/6269863.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!