了解协议和代理,
协议是什么?协议是不是类,按类的定义协议不算类,但是有些书籍上称协议为协议类,这个就当协议不是类,也不纠结了 -_-||
协议是方法声明的集合,以关键字:@protocol标示
例如一个Protect协议定义如下:
@protocol Protect
方法一;
方法二;
协议没有方法的实现,只有方法的声明,与类的函数声明一样。
协议的方法在Xcode5.1之后就都是可“选择实现”的,不管有没有@required修饰,亲测!
类可以选择遵守一个协议而且可以选择实现的方法。
类遵守协议方法:
#import "PretectDeget.h"//导入协议
@interface Person : NSObject<PretectDeget>//尖括号里添加协议名协议
代理:
/*************PretectDeget协议***************/
#import <Foundation/Foundation.h>
@protocol PretectDeget <NSObject>
-(void)ToBark:(NSInteger)count;
@end
#import <Foundation/Foundation.h>
#import "PretectDeget.h"
@interface Dog : NSObject<PretectDeget>
{
id <PretectDeget>obj;
}
@property(nonatomic,assign)id obj;
-(void)kill;
@end
/*************Dog.m***************/
#import "Dog.h"
@implementation Dog
-(void)kill{
NSInteger count = random();
[self.obj ToBark:count];
}
@end
#import <Foundation/Foundation.h>
#import "PretectDeget.h"
@interface Person : NSObject<PretectDeget>
@end
/*************Person.m***************/
#import "Person.h"
@implementation Person
-(void)ToBark:(NSInteger)count{
NSLog(@"杀死了%li恐怖分子!",count);
}
@end
/*************main.m***************/
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Dog.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Person *per = [[Person alloc] init];
Dog *dog = [[Dog alloc] init];
dog.obj = per;
[dog kill];
}
return 0;
}