黑马程序员--Protocol 代理协议

 -----------android培训、java培训、java学习型技术博客、期待与您交流!------------

  -----------并不是生来就是大神、代码量决定一切、其他都是假象、----------- 



** Protocol  协议   代理

 协议就是用来声明方法

 任何类都可以实现协议里的方法 

 前提是要遵守协议 

 怎么样遵守协议呢 

 只要遵守了协议 就能拥有协议里的方法生命

 @interface Person :NSObject <MyProtoco>//<这里就是协议>这就等于遵守协议了

 光遵守还不够 协议中 分别还有强制必须实现的方法

 @reuquired  要求必须实现,不实现就会发出警告 默认的

 @optional 不要求要实现

 用于程序员之间的交流 其他程序猿一看就知道哪些需要实现哪些不需要实现

 因为有些方法必须要遵守才能 符合其他方法的协议 不管你实现不实现 你早晚都要实现的 

 如果你不实现创建协议就是个屁

 可以定义多个协议 这样就不单一了 用途就比较广泛了

 格式: @interface Person :NSOjbect <MyProtoco,MyProtoco>;

 只有你实现了之后 才算真正的遵守协议

 协议的作用 是借口作用 也可以说是筛选和限制作用

 比如 某个类第一一个方法 需要遵守MyProtoco协议才可以 称为这个方法的对象

 那么一个类象成为这个类的方法调用对象的时候 它就必须遵守这份协议 否则它是无法调用对象的

 以此来推理, 协议职能调用 遵守协议的方法 而而继承泽拥有了 父类所有的属性和方法

 协议的好处 它建立了类之间的关系 开辟了借口 让类可以调用其他类的方法或者成为其他类的对象

 **基协议

 协议也可以遵守协议

 如: MyProtoco 遵守了 MyProtoco2的协议那么它就拥有的中的所有方法声明

 

 

 

 注意点,循环引用的解决方法

  @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>定义在原来的类中的分类,只要求能看懂语法


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值