A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© vyqrvwgf 中级黑马   /  2015-11-4 12:46  /  563 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.protocol
        让一个类必须实现某个方法

2.protocol的流程
        1)定义协议
        2)采纳指定的协议
        3)实现协议

3.定义协议
        //NSObject 是基协议
        @protocol 协议名称 <NSObject>
        @end

4.采纳协议
        @interface 类名:父类<协议名1,协议名2>
        @end

5.协议使用注意
        1)protocol就一个用途,用来声明一大堆方法,不能写实现
        2)只要某个类遵守了这个协议,就拥有了这个协议中的所有方法声明
        3)只要父类遵守了某个协议,子类也遵守
        4)protocol声明的方法,可以让任何类去实现
        5)oc不能继承多个类,但是能遵守多个协议
        6)基协议是最根本最基本的协议,其中声明了很多最基本的方法
        7)协议可以遵守协议,一个协议遵守了另一个协议,就可以拥有另一份协议中声明的方法

6.protocol声明方法的修饰关键字
        1)required
        必须实现
        2)optional
        选择实现

7.protocol类型限制
       
  1. houseHold.h
  2. #import <Foundation/Foundation.h>
  3. @protocol houseHold <NSObject>
  4. @required
  5. -(void)zuoFan;
  6. -(void)xiYiFu;
  7. //required作用域到此为止
  8. @optional
  9. -(void)goodWork;
  10. @end


  11. Person.h
  12. #import "Girl.h"
  13. #import "houseHold.h"
  14. @interface Person:NSObject
  15. @property(nonatomic,strong) Girl<houseHold> girl;
  16. @end


  17. Person.m
  18. #import "Person.h"
  19. @implementation Person
  20. @end


  21. Girl.h
  22. #import "houseHold"
  23. @interface Girl:NSObject <houseHold>
  24. @end


  25. Girl.m
  26. #import "Girl.h"
  27. @implementation Girl
  28. //required中的必须实现,optional中的选择实现
  29. -(void)zuoFan{
  30.         NSLog(@"会做饭");
  31. }
  32. -(void)xiYiFu{
  33.         NSLog(@"会洗衣服");
  34. }
  35. @end


  36. main.m
  37. int main(){
  38.         Girl *g=[Girl new];
  39.         Person *chengXuYuan=[Person new];
  40.         chengXuYuan.girl=g;
  41.         return 0;
  42. }
复制代码


8.代理设计模式
        1)定义一个协议,里面声明代理类需要实现的方法列表
        2)创建一个代理类,遵守上面的代理协议
        3)在需要代理的类中,定义一个对象为id且遵守代理协议的成员变量
        4)在需要代理的类中调用成员变量_delegate的方法,跳用代理类方法
       
f
  1. indHomeProtocol.h
  2. #import <Foundation/Foundation.h>

  3. @protocol findHomeProtocol <NSObject>
  4. -(void)findHome;
  5. @end


  6. Student.h
  7. #import <Foundation/Foundation.h>
  8. #import "findHomeProtocol.h"
  9. #import "zhongJie_delegate.h"
  10. @interface Student : NSObject
  11. @property (nonatomic,strong) id<findHomeProtocol> delegate;
  12. -(void)wantHome;
  13. @end


  14. Student.m
  15. #import "Student.h"

  16. @implementation Student
  17. -(void)wantHome{
  18.     NSLog(@"去中介找房子");
  19.     [self.delegate findHome];
  20. }
  21. @end


  22. Zhongjie.h
  23. #import <Foundation/Foundation.h>
  24. #import "findHomeProtocol.h"
  25. @interface ZhongJie : NSObject<findHomeProtocol>
  26. @end


  27. Zhongjie.m
  28. #import "zhongJie_delegate.h"
  29. @implementation ZhongJie
  30. -(void)findHome{
  31.     NSLog(@"中介找到房子了");
  32. }
  33. @end


  34. main.m
  35. #import <Foundation/Foundation.h>
  36. #import "Student.h"
  37. int main(int argc, const char * argv[]) {
  38.     @autoreleasepool {
  39.         Student *lazy=[Student new];
  40.         ZhongJie *iLikeMyHome=[ZhongJie new];
  41.         lazy.delegate=iLikeMyHome;
  42.         [lazy wantHome];
  43.         
  44.     }
  45.     return 0;
  46. }
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马