OC-SEL 和 Class
【认识选择器】============================================
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.节约程序的内存
OC-SEL 和 Class的更多相关文章
- OC SEL (@selector) 原理及使用总结(转)
SEL 类成员方法的指针 可以理解 @selector()就是取类方法的编号,他的行为基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Object-C的类不能直接应 ...
- OC语言description方法和sel
OC语言description方法和sel 一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象 ...
- 李洪强iOS开发之OC语言description方法和sel
OC语言description方法和sel 一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象 ...
- OC中的SEL解析
OC中的SEL对象即selector对象,用来保存一个方法的地址.下面通过一个Demo来解析SEL的原理.创建一个Person类,Person.h中: #import <Foundation/F ...
- QF——OC中的SEL类型和Block
@selector(): 可以理解@selector()就是取类方法的编号,他的基本行为类似于C语言中的函数指针(指向函数的指针).它们通过传递方法的地址(或编号)来实现把方法当做参数的效果. 不过在 ...
- OC的特有语法-分类Category、 类的本质、description方法、SEL、NSLog输出增强、点语法、变量作用域、@property @synthesize关键字、Id、OC语言构造方法
一. 分类-Category 1. 基本用途:Category 分类是OC特有的语言,依赖于类. ➢ 如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式 ● 继承 ● 分类(Categor ...
- OC中SEL,类别,继承,协议的使用
1.SEL SEL是selector的缩写,selector在OC中作用是定义一个方法变量,通过该方法变量来调用方法.我们在后面的UI中会经常用selector来调用事件方法.下面我将举两个例子来说明 ...
- oc语言--description方法和sel
一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象方法) 使用NSLog和@%输出某个对象时, ...
- 「OC」类的深入研究、description方法和sel
一.类的深入研究 (一)类的本质 类本身也是一个对象,是class类型的对象,简称“类对象”. Class类型的定义: Typedef struct obj class *class; 类名就代表着类 ...
- OC description和sel
一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象方法) 使用NSLog和@%输出某个对象时, ...
随机推荐
- 在Centos上打Preempt-rt实时补丁(续)
经过上一篇,发现2.6.31版本的补丁不能正常运行(还未找到原因),现改用2.6.33版本: kernel:linux-2.6.33.9 patch:patch-2.6.33.9-rt 解压并打好补丁 ...
- APP数据埋点分类方式
1.数据埋点的重要性 在现实工作中,数据的整体流程为:数据生产-数据采集-数据处理-数据分析和挖掘-数据可视化,其中,数据采集是很重要的一个环节,数据采集得全不全.对不对,直接决定数据广度和质 ...
- Python 实习遇见的各种面试题
Python 语法 说说你平时 Python 都用哪些库 == 和 is 区别. == 是比较两对象的值,is 是比较在内存中的地址(id), is 相当于 id(objx) == id(objy). ...
- vue-cli中config目录下的index.js文件详解
vue-cli脚手架工具config目录下的index.js解析 转载自:http://www.cnblogs.com/ye-hcj/p/7077796.html // see http://vuej ...
- jquery扩展鼠标mousewheel事件
最近项目中要有个鼠标在图片上滚动实现图片放大和缩小的得到功能,隐约的记得好像记得有个 mousewheel 事件,可以实现需求,于是乎,开始在网上查找这一方法,但是,出乎意料的结果,各浏览器对此方法有 ...
- 优秀 H5 案例收集 vol.3(不定期更新)
上期浏览:Vol.1 Vol.2 爱的不同定义,五笔连成爱http://news.163.com/special/fdh5_valentines/ 世界华语悬疑文学大赛—下一位悬疑大师,就是你!h ...
- CF960G(第一类斯特林数)
题目 CF960G 做法 设\(f(i,j)\)为\(i\)个数的序列,有\(j\)个前缀最大值的方案数 我们考虑每次添一个最小数,则有:\(f(i,j)=f(i-1,j)+(i-1)*f(i-1,j ...
- CSS3飘带状3D菜单
在线演示 本地下载
- tesseract 3.05 release 编译
tesseract 3.05 release版本的对应配置好的vs2015工程.偷懒必备,毕竟依赖那么多库,环境配置还是要费点事的.https://github.com/peirick/VS2015_ ...
- AppLocker Pro FAQ
How to use AppLocker Pro: 1. Start AppLocker Pro, create a password.2. In the main console, click &q ...