在项目中经常会用到代理的设计模式,这是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,代理是另外的方法,属性不容易传递

转载于:https://www.cnblogs.com/ritian/p/6269863.html

iOS 代理设计模式相关推荐

  1. iOS开发篇——OC 协议和代理设计模式介绍

    蓝鸥iOS培训讲师推荐:好久没和大家沟通了,没和大家沟通了,今天就和大家说说有关OC内容协议和代理设计模式.首先要讲的是协议 一.协议 OC中的协议和接口有些相似,协议中定义的方法,在类中实现.协议一 ...

  2. IOS代理的设计模式

    在项目中我们经常会用到代理的设计模式,这是iOS中一种消息传递的方式,也可以通过这种方式来传递一些参数.这篇文章会涵盖代理的使用技巧和原理,以及代理的内存管理等方面的知识.我会通过这些方面的知识,带大 ...

  3. iOS 代理反向传值

    iOS 代理反向传值 在上篇博客 iOS代理协议 中,侧重解析了委托代理协议的概念等,本文将侧重于它们在开发中的应用. 假如我们有一个需求如下:界面A上面有一个button.一个label.从界面A跳 ...

  4. iOS——MVC设计模式

    什么是MVC MVC是Model-View-Controller的简写,它表示的是一种常见的客户端软件开发框架.可见他是由三个部分组成的. 下面解释一下这三个部分: Model:即为模型,用来存储业务 ...

  5. ARC,block,protocol,代理设计模式

    一.ARC 1.基本简介 (1)ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需 ...

  6. java之 代理设计模式

    1. 设计一个案例来实现租房功能.分析:在租房的过程中涉及到了3个对象,房东,中介,房客. 中介和房客具有相同的功能--租房. 可以设计如下: 2.上图的设计实际上就是一个代理设计模式---静态代理设 ...

  7. Java设计模式(十三):代理设计模式

    代理模式可以分为以下四类 远程代理(Remote Proxy):控制对远程对象(不同地址空间)的访问,它负责将请求及其参数进行编码,并向不同地址空间中的对象发送已经编码的请求. 虚拟代理(Virtua ...

  8. 【Spring】Spring第二天 - AOP 详解、动态代理设计模式(JDK和cglib)

    一.AOP AOP 和 Filter 能够实现的 功能相似. AOP 和 Filter 的区别: AOP拦截的是类中方法(切点),只要方法能够被Spring管理,那么这个方法就能够被拦截. Filte ...

  9. Java代理设计模式(Proxy)的四种具体实现:静态代理和动态代理

    面试问题:Java里的代理设计模式(Proxy Design Pattern)一共有几种实现方式?这个题目很像孔乙己问"茴香豆的茴字有哪几种写法?" 所谓代理模式,是指客户端(Cl ...

最新文章

  1. Linux下DIY DLAN投屏方案
  2. 如何解决ORA-12547错误!
  3. 8 种常见SQL错误用法,你千万别犯!
  4. 【网址收藏】达内Django视频笔记收藏
  5. windows下如何启动redis
  6. 快讯|MIT遥控机器人;日本推出带摄像头的智能AI马桶;德国在线零售商Zalando引进拣货机器人等...
  7. linux 修复图形界面,图形界面操作的备份和恢复Linux发行版
  8. 网页设计如何排成一列_网页设计如何影响以及改善SEO?
  9. 【转载保存】cookie在登录时的使用
  10. azure 安全组_用户安全和Azure成本风险
  11. iOS开发之 WebView
  12. ubunut安装stlink
  13. Mysql-多表查询
  14. 过滤器与拦截器的区别?
  15. 51单片机之蜂鸣器为什么不响
  16. HM-GNN:基于分子-基序异构图神经网络的分子表示学习模型
  17. uniapp 侧边选项卡(左右滚动)
  18. 苹果手机有锁那些事,小心被坑
  19. 搭建注册中心Eureka运行时报错:[ main] o.s.b.d.LoggingFailureAnalysisReporter :
  20. 中科创达发布融合智能泊车技术于解决方案

热门文章

  1. assign和always的使用
  2. 笔记本高分屏字体模糊_高色域+高分辨率轻薄本推荐,你需要2K屏笔记本电脑么?...
  3. WindowsPE 第七章 资源表
  4. POJ1042 贪心钓鱼
  5. 【BLE MIDI】MIDI 时间标志分析 ( 音符速度设置事件 | 拍号设置事件 | 基本时间 - 每个四分音符有多少 tick 或 pulse | 节拍时值计算 | 小节时值计算 )
  6. 【Groovy】Groovy 脚本调用 ( Java 类中调用 Groovy 脚本 )
  7. 【Groovy】闭包 Closure ( 自定义闭包参数 | 自定义单个闭包参数 | 自定义多个闭包参数 | 闭包参数默认值指定 )
  8. 【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序打印字符串 | 递归要素 | 递归停止条件 | 递归操作 )
  9. 【音频处理】Melodyne 自动修正功能 ( 修正音高中心 | 修正音高补偿 | 节拍自动修正 | 量化时间 )
  10. [Spring cloud 一步步实现广告系统] 11. 使用Feign实现微服务调用