protocol代理设计模式

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处理


原文地址:https://www.cnblogs.com/kongweiiwei/p/4619414.html