码迷,mamicode.com
首页 > 其他好文 > 详细

[Objective-c 基础 - 3.4] protocol

时间:2014-11-24 20:28:26      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   使用   sp   strong   文件   

A.概念

1.用来声明方法(不能声明成员变量)
2.只要某个类遵守了这个协议,相当于拥有了协议中得所有方法的声明
3.属性
(1)@required:默认,要求实现,不实现就会发出警告
(2)@optional:不要求实现
————MyProtocol.h--------------
 1 @protocol MyProtocol
 2 @required
 3 - (void) test1;
 4 
 5 @optional
 6 - (void) test2;
 7 
 8 - (void) test3;
 9 
10 @end
 
4.父类遵循的协议,子类也会继承
 
5.基协议
(1)一个协议遵守了另外一个协议,就可以拥有其所有声明的方法
————MyProtocol.h———————
1 #import <Foundation/Foundation.h>
2 #import "MyProtocol.h"
3 
4 @protocol MyProtocol2 <MyProtocol>
5 
6 
7 @end
 
(2)基协议<NSObject>
a..建议所有协议都遵循基协议
@protocol MyProtocol <NSObject>
 
b.动态遵守协议
    Person<MyProtocol2> *p = [[Person alloc] init];
 
c.遵守多个协议
@interface Person : NSObject <MyProtocol, MyProtocol2>
 
 
6.协议和成员对象
===========Person.h====================
1 @interface Person : NSObject <MyProtocol]] >
2 
3 @property(nonatomic, strong) id<MyProtocol2> obj;
4 
5 @end
 
===========main.c======================
1 int main(int argc, const char * argv[]) {
2     Person *p = [[Person alloc] init];
3     Dog *d = [[Dog alloc] init];
4    
5     p.obj = d; // 警告,Dog没有遵守MyProtocol2协议
6    
7     return 0;
8 }
 
7.@protocol
在.h可以先使用@protocol声明协议,在.m中再#import进来protocol的.h文件
==========Person.h=====================
 1 #import <Foundation/Foundation.h>
 2 
 3 @protocol MyProtocol;
 4 @protocol MyProtocol2;
 5 
 6 @interface Person : NSObject <MyProtocol]] >
 7 
 8 @property(nonatomic, strong) id<MyProtocol2> obj;
 9 
10 @end
 
==========Person.m=====================
 1 #import "Person.h"
 2 #import "MyProtocol.h"
 3 #import "MyProtocol2.h"
 4 
 5 @implementation Person
 6 - (void)test1
 7 {
 8    
 9 }
10 
11 - (void)test3
12 {
13    
14 }
15 
16 @end
 
 

[Objective-c 基础 - 3.4] protocol

标签:style   blog   io   ar   color   使用   sp   strong   文件   

原文地址:http://www.cnblogs.com/hellovoidworld/p/4119381.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!