QF——iOS代理模式
iOS的代理模式:
A要完成某个功能,它可以自己完成,但有时出于一些原因,不方便自己完成。这时A可以委托B来帮其完成此功能,即由B代理完成。但是这个功能不是让B随随便便任其完成。此时,会有一个协议文件,里面定义了完成该功能的方法规范。B得实现这个协议,严格按照协议里定的规范完成。这就是iOS代理模式的基本思想。
步骤:
<1>定义一个协议:@protocal 。里面只声明方法,确定了该方法的规范(返回值和参数等)
<2>给A添加代理属性。代理的类型必须是id<xxx> 。即为“实现了xxx协议的任何对象”。任意对象,只要你实现了xxx协议。
@property id<xxx> delegate
<3>使B类实现xxx协议,并实现协议里的方法。
<4>在A里设置代理为b。self.delegate = b;
当A需要实现此功能时,应该先判断自己的属性_delegate是否已经了此方法,若实现了,调用就行了。
代理模式传值:
在iOS里,代理模式有很多用处。比如可以用来在不同界面间传值,而且通常是用在把当前界面的值传给上一个界面。
这篇博文总结地很好:点击
QF——iOS代理模式的更多相关文章
- iOS代理模式
iOS代理模式的简单理解:当一个对象无法直接获取到另一个对象的指针,又希望对那个变量进行一些操作时,可以使用代理模式. 代理主要由三部分组成: (1)协议:用来指定代理双方可以做什么,必须做什么. ( ...
- iOS代理模式(delegate)的使用
前言: 代理模式是iOS中非常重要的一个模式,iOS SDK中的系统控件几乎都用到了代理模式.代理模式用来处理事件监听.参数传递功能. 协议创建(Protocol): 可手打如下代码,或者在代码块里面 ...
- IOS 代理模式 DELEGATE
代理模式:将我(类或结构体)需要来完成的工作交给另一个具备我所要求的能力的人(实现协议的对象)来执行 协议:具备哪些能力 例子:我要去买火车票,没时间买,委托黄牛买票 协议:买票 //: Playgr ...
- iOS开发-代理模式
代理模式有的时候也被称之为委托模式,但是实际上两者是有分别的,代理模式为另一个对象提供一个替身或占位符访问这个对象,代理对象和控制访问对象属于同一类,委托对象和对象不一定属于同一类.两者都可以控制类的 ...
- iOS的动态代理模式的实现
动态代理模式的应用很多,特别是在不能修改被代理类的前提下,要对执行某些方法时需要打log或者捕捉异常等处理时,是一个非常方便的方法.只需要少量修改客户端(场景类)代码和添加一个代理类就可以实现,这个符 ...
- iOS重一些常用的代理模式
(一)代理模式 应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现.优势:解耦合敏捷原则:开放-封闭原则实例:tableview的 数据源delegate,通过和proto ...
- iOS:使用代理模式监听开关状态改变事件
记一次解决跨控制器监听开关状态改变的尝试. 为了统一设置UITableViewCell里的内容,自定义了UITableViewCell类的一个基类,命名为SettingCell.SettingCell ...
- iOS设计模式之代理模式
代理模式 基本理解 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. 代理模式的应用 远程代理:就是为一个对象在不同的地址空间提供据不代表.这样可以隐藏一个对象存在于不同地址空间 ...
- IOS第五天(2:用户登录,回车的监听(代理模式UITextFieldDelegate)) 和关闭键盘
*********用户登录,回车的监听(代理模式UITextFieldDelegate) #import "HMViewController.h" @interface HMVie ...
随机推荐
- IE6、7下inline-block不起作用
网上查到资料是给元素设定display:inline-block,再触发layout,设定display:inline;因为所有的浏览器都支持inlie. 即: div{display:inline- ...
- Broadcast详解
今天闲来无事,研究了下Android的Broadcast,发现Broadcast在Android系统中担任着很艰巨的角色. Broadcast是Android的四大组件之一:Broadcast分为普通 ...
- Collections类方法详解
Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序.搜索以及线程安全等各种操作. 1) 排序(Sort)使用sort方法可以根据元素的自然顺序 对 ...
- sffs
因为微软收购了Skype,就减少了对linux版软件的支持,官方下载页面已找不到了.只有这一个地址了.要下的尽早.http://download.skype.com/linux/skype-ubunt ...
- 自学HTML5第一天(认识HTML5的全局属性)
contextmenu 属性 规定 <div> 元素的上下文菜单.上下文菜单会在用户右键点击元素时出现.列子: <div contextmenu="mymenu" ...
- sqlmap新手注入
一 什么是sqlmap sqlmap is an open source penetration testing tool that automates the process of detectin ...
- View的工作原理
一.认识ViewRoot和DecorView 当Activity对象被创建的时候,会将DecorView添加到Window中,同时创建ViewRootImpl对象(ViewRoot对应于ViewRoo ...
- Python学习笔记(三)Python的list和tuple
list list类似其他语言中的数组,是一种有序的集合,可以随时添加和删除其中的元素. 使用len()函数可以获得list元素的个数. list的索引从0开始,当超出范围时会报IndexError错 ...
- SQL Server 改变数据库的名字
方法 1: alter database modiry name = new_database_name; ---------------------------------------------- ...
- Invalidate(TRUE)与Invalidate(FALSE)区别(前者会发送WM_ERASEBKGND消息全部刷新,然后使用WM_PAINT消息绘制,而后者只发送WM_PAINT消息)
使用Invalidate(TRUE)函数时,它会向消息队列中添加了WM_ERASEBKGND和WM_PAINT两个消息. 使用Invalidate(FALSE)函数时,它只会向消息队列中添加了WM_P ...