黑马程序员技术交流社区
标题:
oc中的protocol
[打印本页]
作者:
vyqrvwgf
时间:
2015-11-4 12:46
标题:
oc中的protocol
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类型限制
houseHold.h
#import <Foundation/Foundation.h>
@protocol houseHold <NSObject>
@required
-(void)zuoFan;
-(void)xiYiFu;
//required作用域到此为止
@optional
-(void)goodWork;
@end
Person.h
#import "Girl.h"
#import "houseHold.h"
@interface Person:NSObject
@property(nonatomic,strong) Girl<houseHold> girl;
@end
Person.m
#import "Person.h"
@implementation Person
@end
Girl.h
#import "houseHold"
@interface Girl:NSObject <houseHold>
@end
Girl.m
#import "Girl.h"
@implementation Girl
//required中的必须实现,optional中的选择实现
-(void)zuoFan{
NSLog(@"会做饭");
}
-(void)xiYiFu{
NSLog(@"会洗衣服");
}
@end
main.m
int main(){
Girl *g=[Girl new];
Person *chengXuYuan=[Person new];
chengXuYuan.girl=g;
return 0;
}
复制代码
8.代理设计模式
1)定义一个协议,里面声明代理类需要实现的方法列表
2)创建一个代理类,遵守上面的代理协议
3)在需要代理的类中,定义一个对象为id且遵守代理协议的成员变量
4)在需要代理的类中调用成员变量_delegate的方法,跳用代理类方法
f
indHomeProtocol.h
#import <Foundation/Foundation.h>
@protocol findHomeProtocol <NSObject>
-(void)findHome;
@end
Student.h
#import <Foundation/Foundation.h>
#import "findHomeProtocol.h"
#import "zhongJie_delegate.h"
@interface Student : NSObject
@property (nonatomic,strong) id<findHomeProtocol> delegate;
-(void)wantHome;
@end
Student.m
#import "Student.h"
@implementation Student
-(void)wantHome{
NSLog(@"去中介找房子");
[self.delegate findHome];
}
@end
Zhongjie.h
#import <Foundation/Foundation.h>
#import "findHomeProtocol.h"
@interface ZhongJie : NSObject<findHomeProtocol>
@end
Zhongjie.m
#import "zhongJie_delegate.h"
@implementation ZhongJie
-(void)findHome{
NSLog(@"中介找到房子了");
}
@end
main.m
#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Student *lazy=[Student new];
ZhongJie *iLikeMyHome=[ZhongJie new];
lazy.delegate=iLikeMyHome;
[lazy wantHome];
}
return 0;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2