【认识选择器】============================================
SEL
1.选择器(SEL)是一个变量类型。
2.选择器用来装成员消息(成员方法)
people* manInBlack = [[people alloc]init];
//SEL 是一个选择器类型,好比int a,int 是一个整型
//创建了一个选择器sel,sel装了manInBlack中的printName方法
SEL sel = @selector(printName);
//执行选择器
[manInBlack performSelector:sel];
//
//[manInBlack printName:@"我是超人,我会飞"];
//多了一个冒号
SEL sel1 = @selector(printName:);
//执行一个带参数的选择器方法
[manInBlack performSelector:sel1 withObject:@"我是超人,我会飞"];
//
//[manInBlack printName:@"我长大了" withAge:@"5岁"];
//创建一个带2个参数的选择器
SEL sel2 = @selector(printName:withAge:);
//执行一个带2个参数的选择器
[manInBlack performSelector:sel2 withObject:@"我长大了" withObject:@"5岁"];
//【注】选择器方法,最多带2个参数
二.选择器的作用======================================================
1.选择器支持ios开发,事件的相应机制。
2.选择器可用于方法的回调(代理)
3.选择器可以另一个方法实现多个功能,实现代码重用。
//编译时确定调用哪个方法
SEL sel = @selector(test1);
//NSSelectorFromString 可以在运行时确定调用哪个方法
NSString* selectorStr = [NSString stringWithFormat:@"test%d",i];
//NSSelectorFromString 可以把字符串转成SEL方法
//NSSelectorFromString 是一个系统方法,可以把nsstring转成SEL类型
SEL sel2 = NSSelectorFromString(selectorStr);
三.isKindofClass===========================================
【注】
1.用SEL声明的变量来装成员方法
2.用Class声明的变量来装类型
//把test这个方法装入sel这个变量
SEL sel = @selector(test);
//把 book这个类型装入las这个变量中
//Class这个是用来装类的类型的一个类型
Class las = [book class];
NSArray* array = @[@"one",@"tow",mybook,@"jack"];
//[问]如何从array取出book这个类型的变量
for(id object in array)
{
//isKindOfClass 用来判断object 这个对象是否是book 类型的
//isKindOfClass 用于判断对象属于哪个类
if ([object isKindOfClass:las]) {
NSLog(@"%@",object);
}
}
【动态创建类】
【注】用NSClassFromString可以实现动态创建,取出的这个类必须是当前工程中的类,如果当前工程中不存在这个类
//把一个NSString类型装入Class所定义的变量
// //告诉编译器在当前工程中去找名字是book.h book.m的类然后转换成一个类型。转换成一个book类型
// Class mybook = NSClassFromString(@"book");
//
// book * myFirstBook = [[mybook alloc]init];
NSMutableArray* tmpArr = [[NSMutableArray alloc]init];
NSArray* classNameArray = @[@"surperMan",@"food",@"book"];
for (int i = 0; i<3; i++) {
NSString* C_name = classNameArray[i];
//NSClassFromString 把字符串所对应的类给取出来
//前提条件是:取出的这个类必须是当前工程中的类,如果当前工程中不存在这个类
//则返回nil
//用NSClassFromString可以实现动态创建
Class myClass = NSClassFromString(C_name);
id obj = [[myClass alloc]init];
[tmpArr addObject:obj];
}
//动态创建类好处非常多
//1.大大简化了代码量
//2.使程序功能更加强大
//3.节约程序的内存