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)所有的协议都必须直接或者间接的遵守基协议; 2)一个协议可以被多个对象同时遵守; 3)一个对象可以同时遵守多个协议; 4)如果父类遵守了某个协议,那么子类也会把这个协议继承下去;1.8指针的限定 id<协议名> obj = [[xxxalloc]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做事的能力)

【day8---协议与代理】三 头文件循环包含
A文件导入了B的头文件,同时B的头文件又导入了A的头文件,这样,在展开头文件的时候,就会 无限循环展开,这个过程称为“循环包含”;
见【Demo】-【3-循环包含的问题】
解决方案: #import只能解决头文件重复包含的问题,但解决不了头文件循环包含; @class解决头文件循环包含的问题; @class 类名;表示的是一个类的前置声明,仅仅告诉当前工程中有这个类而已,但是并没有导入该类的头文件,所以如果使用@class类名,在.m文件如果需要使用该类的方法或属性,需要在.m文件里导入该类的头文件,只有真正的导入了头文件,才能使用该类的相关接口;【在一定意义上合理的正确的使用@class,可以提高编译性能,缩短编译时间】;

    推荐阅读