考完试了才发现自己之前不清晰的地方还有好多。。。
协议选择器
-协议的引用指向一个协议
Protocol *p = @protocol(NSCopying);
-可以判断一个类是否遵循了某个协议
BOOL b = [Student conformsToProtocol:p];
1、协议用到的情况:某个类有一个实例方法,这个实例方法对所传过来的对象,限制其必须实现了某个特定的方法,而对传过来的对象类型没有限制。
2、格式
协议名:@protocol 协议名 协议名命名一般:类名+Delegate。
协议内容:特定的某方法
具体举例:
①
Aa类中得实例方法是具有协议限制的。
Bb类是一个普通类。
②
Aa.h中:
//协议写法
@protocol AaDelegate <NSObject>
//协议内容
-(void)play;
@end
@interface Aa :NSObject
//传染的对象 遵守协议
-(void)playWithObject:(id<AaDelegate>)anyobject;
@end
Aa.m中写好带协议的实例方法
-(void)playWithObject:(id<AaDelegate>)anyobject{
[anyobjectplay];
}
③
当在ViewController中引入Aa Bb 类。
分别创建对象。Aa 类对象,调用实例方法把Bb类对象传入时报警告:要求Bb 类对象必须遵守Aa 类中实例方法的协议。
需要在Bb类的Bb.h:
引入协议所在类
#import"Aa.h"
让Bb类遵守协议:
@interface Bb :NSObject<AaDelegate>
在Bb.h中实现协议内容。