方法选择器
1.是一种新的数据,用于唯一识别类中的方法
2.该数据的数据类型是SEL
3该数据可以通过@selector获得
4.instanceRespondToSelector: 判断一个类中是否有指定的方法
5.respondsToSelector: 判断一个对象是否能调用指定方法
6.performSelector: 用于调用方法选择器标识的方法
#import <Foundation/Foundation.h>
#import "CZStudent.h"
void fun(id f,SEL sel)
{
if([f respondsToSelector:sel]==YES)
{
[f performSelector:sel];
}
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
CZStudent *stu=[[CZStudent alloc]initWithName:@"小明" andAge:18];
SEL sel=@selector(study);
if([CZStudent instancesRespondToSelector:sel]==YES)
{
NSLog(@"类TRStudent中有方法study");
}
if([CZStudent instancesRespondToSelector:@selector(learn)]==YES)
{
NSLog(@"类....中有方法learn");
}
NSLog(@"-----------");
if([stu respondsToSelector:sel]==YES)
{
NSLog(@"对象stu可以调用study方法");
}
if([stu respondsToSelector:@selector(learn)]==YES)
{
NSLog(@"对象stu可以调用learn方法");
}
NSLog(@"-----------");
[stu performSelector:sel];
}
return 0;
}
协议选择器
1.是一种新的数据,用于唯一标识工厂中的
2.该数据的数据类型是Protocol*
3.该数据可以通过@protocol获得
4.conformsToProtocol: 判断一个类是否采纳了指定的协议
int main(int argc, const char * argv[]) {
@autoreleasepool {
Protocol *p=@protocol(NSCopying);
if([CZStudent conformsToProtocol:p]==YES)
{
NSLog(@"类TRStudent采纳了NSCopy洗衣");
}
if([CZTeacher conformsToProtocol:p]==YES)
{
NSLog(@"CZTeacher采纳了NSCopying协议");
}
}
return 0;