------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1、protocol的用途
1)用来声明方法(不能声明成员变量)
2)遵守这个协议的类,相当于拥有这个协议中所有的方法声明
3)子类能够继承父类遵守的协议
协议书写格式:
@protocol 协议名称 <NSObject>
// 方法声明列表....
@end
注意:<NSObject> 为本协议遵守的协议,也可以换成其它协议。一个协议遵守另外的协议,就相当于拥有了那个协议的所有方法的声明。<NSObject>是任何协议和类都要继承(或间接继承)的协议被称为基协议。
遵守协议的书写格式:
@interface ClassName : FatherClass <protocol1, protocol2>
@end
@required // 默认,要求实现,如果没有实现,会发出警告(只是警告,不会报错)
@optional // 不要求实现,是否实现都不会有警告
4、限制生成的对象变量 / 声明类中的成员对象 遵守某个协议
a)声明类中的成员对象遵守协议
// @property (nonatomic, strong) 类名<协议名称> *属性名;
@property (nonatomic, strong) Dog<MyProtocol> *dog;
// @property (nonatomic, strong) id<协议名称> 属性名;
@property (nonatomic, strong) id<MyProtocol> dog2;
b)限制生成的对象变量遵守协议
// 类名<协议名称> *变量名;
NSObject<MyProtocol> *obj;
// id<协议名称> 变量名;
id<MyProtocol> obj2;
5、代理设计模式
设计了一个最小化“代理模式”例程:
//
// Helpprotocol.h
//
#import <Foundation/Foundation.h>
@protocol Helpprotocol <NSObject>
- (void)paotui;
@end
//
// Man.h
//
#import <Foundation/Foundation.h>
#import “Helpprotocol.h"
@interface Man : NSObject
- (void)jiaorenpaotui;
@property (nonatomic, strong) id<Helpprotocol> somehelper;
@end
//
// Man.m
//
#import "Man.h"
@implementation Man
- (void)jiaorenpaotui
{
[_somehelper paotui];
}
@end
//
// Helper.h
//
#import <Foundation/Foundation.h>
#import “Helpprotocol.h"
@interface Helper : NSObject <Helpprotocol>
@end
//
// Helper.m
//
#import “Helper.h"
@implementation Helper
- (void)paotui
{
NSLog(@"pao tui wan cheng!");
}
@end
//
// main.m
//
#import <Foundation/Foundation.h>
#import "Man.h"
#import “Helper.h"
int main()
{
Man *man1 = [[Man alloc] init];
Helper *helper1 = [[Helper alloc]init];
man1.somehelper = helper1;
[man1 jiaorenpaotui];
return 0;
}