zoukankan      html  css  js  c++  java
  • iOS 代理设计模式

    在项目中经常会用到代理的设计模式,这是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进去.

      有时候需要用到外面的属性应该用block,代理是另外的方法,属性不容易传递

  • 相关阅读:
    判断目录下的文件是否为图片
    多个视图结果显示于一个共用预览视图内
    最原创的验证码产生过程,桃花朵朵开
    ASP.NET MVC实现剪切图片
    ASP.NET MVC应用程序把文字写在图片上
    MVC把随机产生的字符串转换为图片
    ASP.NET MVC验证码演示(Ver2)
    ASP.NET MVC验证码演示
    linux负载均衡总结性说明(四层负载/七层负载)
    MySQL 优化系列(1)-- InnoDB重要参数优化
  • 原文地址:https://www.cnblogs.com/ritian/p/6269863.html
Copyright © 2011-2022 走看看