• 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处理
    
    
  • 相关阅读:
    bzoj 2618: [Cqoi2006]凸多边形
    BZOJ 4556 [Tjoi2016&Heoi2016]字符串
    BZOJ 4850 [Jsoi2016]灯塔
    BZOJ 2956: 模积和
    PHP 正则表达式
    Linux Centos6.5安装redis3.0 和phpredis
    linux 删除过期文件
    THINKPHP报错 _STORAGE_WRITE_ERROR
    THINKPHP 部署nginx上URL 构造错误
    Linux 修改mysql密码
  • 原文地址:https://www.cnblogs.com/kongweiiwei/p/4619414.html
Copyright © 2020-2023  润新知