1:前提必须掌握的知识 ARC下的@property参数 strong : 用于OC对象, 相当于MRC中的retain weak : 用于OC对象, 相当于MRC中的assign assign : 用于基本数据类型, 跟MRC中的assign一样 copy : 一般用于NSString, 跟MRC中的copy一样 在ARC情况下解决”循环retain”的问题:@property一边用strong,一边用weak。
2:protocol代理设计模式引入
代理模式是在oc中经常遇到的一种设计模式,那什么叫做代理模式呢?
举个例子:有一个婴儿,他本身不会自己吃饭和洗澡等等一些事情,于是婴儿就请了一个保姆,于是婴儿和保姆之间商定了一个协议, 协议中写明了保姆需要做什么事情, 而保姆就是这个代理人, 即:婴儿和保姆之间有个协议,保姆遵守该协议,于是保姆就需要实现该协议中的条款成为代理人。
3:代码实现:婴儿一要吃东西或者睡觉,保姆执行相应动作照顾婴儿
lookBabyProtocol.h :定义一个协议,里面声明代理类需要实现的方法列表, 比如这里一个代理类需要实现feedBaby与HongSleep方法
Baby.h :在需要代理的类中(Baby),定义一个对象类型为id且遵守代理协议的成员变量
Baby.m
BaoMu.h :创建一个代理类(比如BaoMu),遵守上面的代理协议
BaoMu.m
main.m :main.m或其他使用Baby类的文件中,为Baby类的成员变量(代理类)赋值
4:过程分析
这个例子中baby想吃就通知代理(baby.m中定义的方法),然后代理就给baby吃。 baby 一想吃,保姆就给他吃, 相当于baby一想吃,就调用保姆的方法,相当于保姆监听baby的一举一动 这个例子可不可以理解成: * 当对象baby发生了一些行为,想告知对象baomu (让对象B成为对象A的代理对象) * 对象baomu想监听对象baby的一些行为 (让对象B成为对象A的代理对象) * 当对象baby无法处理某些行为的时候,想让对象baomu帮忙处理 (让对象B成为对象A的代理对象)
5:protocol代理设计模式 1> protocol代理设计模式概念 代理模式概念:传入的对象,代替当前类完成了某个功能,称为代理模式 利用协议实现代理模式的主要思路为: 1)定义一个协议,里面声明代理类需要实现的方法列表, 比如这里一个代理类需要实现feedBaby与HongSleep方法 2)创建一个代理类(比如BaoMu),遵守上面的代理协议 3)在需要代理的类中(Baby),定义一个对象类型为id且遵守代理协议的成员变量 4)在Baby类中调用成员变量_delegate(代理)的方法,调用代理类的方法 5)main.m或其他使用Baby类的文件中,为Baby类的成员变量(代理类)赋值 2> protocol代理模式应用场合 * 当对象A发生了一些行为,想告知对象B (让对象B成为对象A的代理对象) * 对象B想监听对象A的一些行为 (让对象B成为对象A的代理对象) * 当对象A无法处理某些行为的时候,想让对象B帮忙处理 (让对象B成为对象A的代理对象) 1)监听器的场合 * baomu想监听Baby的一些行为 2)通知的场合 * Baby发生了一些行为,想告知baomu 3)有些事情,不想自己处理,想交给别人处理 * Baby发生了一些行为, 但是自己不会处理, 可以交给baobu处理