选择器
============================================================
认识选择器(Selector)
1. 选择器(SEL)是一个变量类型,SEL 是oc特有的类型
2. SEL的变量装消息, 类似于函数指针
Objective-C在编译的时候,会根据方法的名字(包括参数序列),
生成一个用来区分这个方法的唯一的一个ID,这个ID就是SEL类型的。
3. SEL的作用:
从效率的角度上来说,执行的时候不是通过方法名字而是方法ID也就是一个整数来查找方法,
由于整数的查找和匹配比字符串要快得多,所以这样可以在某种程度上提高执行的效率
并且增强程序的灵活性
4. SEL对象的创建
@selector 方法选择器
@selector(xxx) xxx就是方法名
通过@selector方法获取
SEL s1 = @selector(compare:);
//这个方法用于编译时就能确定调用的方法
通过NSSelectorFromString将一个字符串转换为一个SEL类型
SEL s2 = NSSelectorFromString(@“run:”);
//这个方法用于运行时就能确定调用的方法
5. performSelector
作用:执行SEL
[dog performSelector:s1];
[dog performSelector:@selector(setName:) withObject:@"Tom"];
【注】performSelector:最多支持两个参数
6. 使用@selector对数组排序
NSArray数组排序
sortedArrayUsingSelector:函数
作用:通过返回值将排序结果告诉用户,{不会修改数组中的元素}
适用于不能修改的数组
NSMutableArray数组排序
sortUsingSelector:函数
作用:直接对数组内的元素进行排序,{最后结果保存在要排序的数组中}
适用于可被修改的数组
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
//在ARC(自动内存管理)的条件下,使用选择器,很可能会报警
//可照该方式去除报警
#pragma clang diagnostic pop