-----------android培训、java培训、java学习型技术博客、期待与您交流!------------ -----------并不是生来就是大神、代码量决定一切、其他都是假象、-----------
**
Protocol
协议
代理
协议就是用来声明方法 任何类都可以实现协议里的方法 前提是要遵守协议 怎么样遵守协议呢 只要遵守了协议 就能拥有协议里的方法生命 @interface Person :NSObject <MyProtoco>//<这里就是协议>这就等于遵守协议了 光遵守还不够 协议中 分别还有强制必须实现的方法 @reuquired 要求必须实现,不实现就会发出警告 默认的 @optional 不要求要实现 用于程序员之间的交流 其他程序猿一看就知道哪些需要实现哪些不需要实现 因为有些方法必须要遵守才能 符合其他方法的协议 不管你实现不实现 你早晚都要实现的 如果你不实现创建协议就是个屁 可以定义多个协议 这样就不单一了 用途就比较广泛了 格式: @interface Person :NSOjbect <MyProtoco,MyProtoco>; 只有你实现了之后 才算真正的遵守协议 协议的作用 是借口作用 也可以说是筛选和限制作用 比如 某个类第一一个方法 需要遵守MyProtoco协议才可以 称为这个方法的对象 那么一个类象成为这个类的方法调用对象的时候 它就必须遵守这份协议 否则它是无法调用对象的 以此来推理, 协议职能调用 遵守协议的方法 而而继承泽拥有了 父类所有的属性和方法 协议的好处 它建立了类之间的关系 开辟了借口 让类可以调用其他类的方法或者成为其他类的对象 **基协议 协议也可以遵守协议 如: MyProtoco 遵守了 MyProtoco2的协议那么它就拥有的2 中的所有方法声明
注意点,循环引用的解决方法 类A : @protocol MyProtoco
--------------------------------------------- 要求obj3保存的对象必须遵守MyProtocol2这个协议 NSOjbect<MyProtocol2> *obj = [Person allco] init]; id <Myprotocol> obj2 = [[Person alloc] init]; 要求obj5 保存的对象 必须遵守<Protocol>协议 并且继承Person类型
NSObject <MyProtocol> *obj3 = [[ Person alloc ] init]; Person 即遵守了 <MyProtocol>协议 又是Person 类型 符合条件 具体用途还不知道
@Property (nonatomic , strong) id<MyProtocol> obj; //调用这个方法创建对象的时候必须遵守myprotocol协议
@interface Dog : NSObject <Myprotocol>
Person *p = [[Person alloc] init]; p.id = [[Dog allco] init]; 狗必须遵守协议才行 狗的字类也可以 因为父类遵守协议 就相当于子类遵守协议
总结 1 协议的定义 @protocol 协议名称 <NSObject> 方法生命
@如何遵守协议 1> 一个类遵守协议 @interface 类名 : 父类名 <协议名称>
2> 协议遵守协议 @protocol 协议名称<其他协议名称1,其他协议名称2> 协议遵守协议就拥有了它所有方法声明
3> 协议中方法声明的关键字 1>@require (默认) 要求实现 如果没有实现 会发出警告 不会抱错 2>@optional 不要求实现,怎么都不会有警告
4定义一个变量的时候,限制这个变量保存的独享遵守某个协议 类名<协议名称> *变量名城
id<MyProtocol> *obj NSObject<MyProtocol> *obj 如果没有遵守对应的协议 编译器会警告
5 @property 中声明属性也可以额用作一个协议的限制 @property (nonatomic , strong) 类型<协议名称> *属性名; @property (nonatomic , strong) id<MyProtocol> obj;
@property (nonatomic , strong) Dog<MyPertocol> *dog;//必须是Dog类型或者子类并且拥有协议 @property (nonatomic , strong) id<MyProtocol> obj;
6.协议可以写在任何类头文件里 Dog.h 当你这个协议 只留给这个协议遵守的时候 就写在类头文件里 但是这个协议 要给多个类使用的时候就写在外面 7.分类可以定义在类的.h和.m文件中,也可以独立创建类 1>一半情况下,都是定义在单独的文件 2>定义在原来的类中的分类,只要求能看懂语法 |
黑马程序员--Protocol 代理协议
最新推荐文章于 2024-08-23 21:57:41 发布