day8---协议与代理

第八天 协议与代理 【**iOS中重点的一种设计模式】

什么是设计模式
是一套被反复使用,多数人知晓的,代码设计经验的总结,使用设计模式的目的是为了可重用代 码,让代码更容易让人理解,保证代码的可靠性,灵活性,让代码更通用,更容易维护,升级!

一 协议
1.1生活中的协议
就业协议,离婚协议,婚前协议,租房协议,劳动合同,医生无责任协议。。。
1.2什么事协议
协议就是双方要相互遵守的约定,规范,行为;
1.3OC中的协议
OC中的协议,就是一组方法列表,不由协议本身实现,由遵守协议的对象来实现协议中规 定的方法;

1.4协议的使用的步骤
    1)制定协议
    2)遵守协议
    3)由遵守协议的对象去实现协议里规定的方法
    //实现协议中规定的方法
    #pragma mark -以下的方法都是CodingProtocol中规定的协议方法       固定格式,便于查                                                                  看实  现的协议方法

    4)调用协议方法

1.5OC中有多继承吗?
    没有多继承,只有单继承;但我们可以使用协议来实现类似于C++中多继承的效果;

总结协议的作用:
1.规范接口,统一接口,让遵守这个协议的所有对象都必须实现一些方法,可以达到统一 接口的效 果;
2.实现类似于C++的多继承的效果
3.开发中最常用【代理设计模式】

1.6 协议和继承都能达到统一接口的母的 (通过方法名相同来实现)
继承:子类继承父类,子类就拥有父类的方法,除非父类的方法不满足子类的需求,需要重        写父类的方法,重写的方法名和父类的方法名一致,这样就达到了统一接口的效果;

协议:协议是用来规范接口,统一接口,一旦一个类遵守了协议,那么就必须实现协议中的        方法,如果多个类同时遵守一个协议,那么这些类中的协议方法名一致,这样达到了统
    一接口的效果!

1.7协议的特点
1)所有的协议都必须直接或者间接的遵守基协议<NSObject>;
2)一个协议可以被多个对象同时遵守;
3)一个对象可以同时遵守多个协议;
4)如果父类遵守了某个协议,那么子类也会把这个协议继承下去;

1.8指针的限定
    id<协议名> obj = [[xxx   alloc]  init];
    obj这个指针所指向的对象,必须是遵守了这个协议的对象,且该指针只能调用该协议中的       协议方法;

二 代理设计模式 【**重点】
是iOS中一种非常重要的设计模式,是通过协议去实现的;

A如果想去做某一件事,但他自己不会做或者不想做,那么A就会委托B帮他去做;
A委托B:  A叫做委托者
        B叫做A的代理人


A委托B
A是委托者:      1)制定协议
            2)声明代理指针,指针指向的对象必须是遵守了该协议的对象
                id<协议名>delegate;
            3)A让代理人B去帮忙做事[self.delegate   协议方法];

B是代理人:  1)遵守A制定的协议
            2)实现协议里规定的方法(代理人B具备了帮A做事的能力)

三 头文件循环包含
A文件导入了B的头文件,同时B的头文件又导入了A的头文件,这样,在展开头文件的时候,就会 无限循环展开,这个过程称为“循环包含”;
见【Demo】-【3-循环包含的问题】

解决方案:
    #import   只能解决头文件重复包含的问题,但解决不了头文件循环包含;
    @class  解决头文件循环包含的问题;
    @class 类名;表示的是一个类的前置声明,仅仅告诉当前工程中有这个类而已,但是并没     有导入该类的头文件,所以如果使用@class类名,在.m文件如果需要使用该类的方法或属     性,需要在.m文件里导入该类的头文件,只有真正的导入了头文件,才能使用该类的相关接       口;
        
    【在一定意义上合理的正确的使用@class,可以提高编译性能,缩短编译时间】;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,916评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,082评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,802评论 18 399
  • 第三章 任何高三学生的生活都被两个字填的满满的:高考。而此时的冯唐早已不像初中时期那般顽皮,她也很卖力,但也有些力...
    赵烛年阅读 737评论 0 1
  • 我衣服很多但是还是总是买 衣服沉的橱子都要塌了 今天佳文想要我的裙子 我答应了 虽然我很多衣服不怎么穿 但是送给别...
    步念顾阅读 236评论 0 1