关闭

oc协议

191人阅读 评论(0) 收藏 举报


协议就是定义一组方法实现类必须实现这些方法,类似于java的接口和抽象类

 

协议的定义语法:

 

Java代码  收藏代码
  1. @protocol  协议名  <父协议>  
  2. 定义方法  
  3. @end  
  4. 注:定义协议的关键字是@protocol,同时协议也是可以继承父协议的  
  5.   
  6. 协议中定义的方法还有两个修饰符:  
  7. @required:这个表示这个方法是其他类必须实现的,也是默认的值  
  8. @optional:这个表示这个方法对于其他类实现是可选的  

 

协议的定义TestProtocol.h

Java代码  收藏代码
  1. //oc协议的简单使用  
  2. @protocol TestProtocol <NSObject>  
  3.   
  4. @required//必须实现  
  5. -(void)printlf;  
  6. +(void)getHotel;  
  7.   
  8. @optional//可选实现  
  9. -(void)setHotel;  
  10.   
  11. @end  
  12.   
  13.   
  14. #endif /* TestProtocol_h */  

伦理片 http://www.dotdy.com/ 

文件TestExtends.h

Oc代码  收藏代码
  1. #import "TestProtocol.h"  
  2.   
  3. @interface TestExtends: NSObject<TestProtocol>{  
  4.       
  5. NSString* name;  
  6.       
  7. }  
  8. @property NSString *name; //类似set和get方法  
  9.   
  10. //@property name;  
  11.   
  12.   
  13. -(void)setName:(NSString*)newName;//定义方法  
  14.   
  15. -(id)initWithC:(NSString*)newName;//定义构造方法  
  16.   
  17.   
  18. @end  
  19.   
  20. #endif /* TestExtends_h */  

 

TestExtends.m文件

Java代码  收藏代码
  1. #import "TestExtends.h"  
  2.   
  3. @implementation TestExtends  
  4.   
  5. @synthesize name;  
  6.   
  7. -(void)setName:(NSString*)newName{  
  8.   
  9.     NSLog(@"调用父类的setName方法");  
  10.   
  11. }  
  12.   
  13. +(void)getHotel{  
  14.  NSLog(@"getHotel");//必须实现的方法  
  15. }  
  16.   
  17. -(void)printlf{  
  18.     NSLog(@"printlf");//必须实现的方法  
  19. }  
  20.   
  21. -(void)setHotel{  
  22.     NSLog(@"setHotel");//可选的方法  
  23. }  
  24.   
  25.   
  26. -(id)initWithC:(NSString *)newName{  
  27.     if (self==[super init]) {  
  28.         name=newName;//  
  29.         NSLog(@"父类的构造方法被调用。。。。");  
  30.     }  
  31.   
  32.     return self;  
  33. }  
  34.   
  35. @end  

 

 影音先锋电影 http://www.iskdy.com/

mian文件

Java代码  收藏代码
  1. TestExtends* te=[[TestExtends alloc] init];  
  2.        [te setName:@"Object-c"];  
  3.        NSLog(@"简单的实现");  
  4.        [te printlf];<span style="font-family: Menlo;"> </span>//调用协议的方法  

 

运行结果:

2015-11-04 23:04:40.179 test_01[1432:80295] 调用父类的setName方法

2015-11-04 23:04:40.180 test_01[1432:80295] 简单的实现

2015-11-04 23:04:40.180 test_01[1432:80295] printlf

 

(lldb) 

 

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:139917次
    • 积分:2168
    • 等级:
    • 排名:第18118名
    • 原创:0篇
    • 转载:504篇
    • 译文:0篇
    • 评论:6条
    文章存档