选择器Selector的使用
2016-03-15 17:50
253 查看
selector oc 数据类型 选择器 跨类传参 方法名 sel it 分类: [iPhone开发]
Selector是OC特有的一种数据类型。可以简单理解为方法的调用。和普通方法调用不同的是。选择器的特点是可以跨类传参。你可以在A类中声明某方法,然后在B类中控制该方法的调用。
说白了SEL就是返回方法名。
这样的机制大大的增加了我们的程序的灵活性,我们可以通过给一个方法传递SEL参数,让这个方法动态的执行某一个方法;我们也可以通过配置文件指定需要执行的方法,程序读取配置文件之后把方法的字符串翻译成为SEL变量然后给相应的对象发送这个消息。
SEL sel = @selector(setName:age:); //selector的声明
当然,在实际应用中,selector是不需要使用这个声明的。因为selector实际上就是方法名。所以直接使用写好的方法名就行了。
跨类动态调用方法示例:
a.m
-(void) forTest
{
B *b = [B initWithDelegate:self
Selector1: @selector(testA:)
Selector2:@selector(testB:)
isA:YES];
}
-(void) testA
{
NSLog(@"I'm TestA");
}
-(void) testB
{
NSLog(@"I'm TestB");
}
b.m
-(id)initWithDelegate:(id) m_delegate
Selector1: (SEL) testA
Selector2: (SEL) testB
isA:(BOOL) isTrue
{
forTestA = testA;//在H文件中定义过SEL类型的forTestA了。
forTestB = testB;//同上
if(isTrue)
[m_delegate forTestA];
else
[m_delegate forTestB];
}
Selector是OC特有的一种数据类型。可以简单理解为方法的调用。和普通方法调用不同的是。选择器的特点是可以跨类传参。你可以在A类中声明某方法,然后在B类中控制该方法的调用。
说白了SEL就是返回方法名。
这样的机制大大的增加了我们的程序的灵活性,我们可以通过给一个方法传递SEL参数,让这个方法动态的执行某一个方法;我们也可以通过配置文件指定需要执行的方法,程序读取配置文件之后把方法的字符串翻译成为SEL变量然后给相应的对象发送这个消息。
SEL sel = @selector(setName:age:); //selector的声明
当然,在实际应用中,selector是不需要使用这个声明的。因为selector实际上就是方法名。所以直接使用写好的方法名就行了。
跨类动态调用方法示例:
a.m
-(void) forTest
{
B *b = [B initWithDelegate:self
Selector1: @selector(testA:)
Selector2:@selector(testB:)
isA:YES];
}
-(void) testA
{
NSLog(@"I'm TestA");
}
-(void) testB
{
NSLog(@"I'm TestB");
}
b.m
-(id)initWithDelegate:(id) m_delegate
Selector1: (SEL) testA
Selector2: (SEL) testB
isA:(BOOL) isTrue
{
forTestA = testA;//在H文件中定义过SEL类型的forTestA了。
forTestB = testB;//同上
if(isTrue)
[m_delegate forTestA];
else
[m_delegate forTestB];
}
相关文章推荐
- android 跟随手指移动的 view
- 本地音乐播放器(一)——简介篇
- solution Of Pat 1111. Online Map (30)
- 想成为前端工程师?希望读完这篇文章能对你有所帮助。
- linux 使用/proc文件系统 实现用户空间与内核模块之间通信
- 局域网无法访问vmware虚拟机WEB服务器解决办法
- 2013年五大主流浏览器 HTML5 和 CSS3 兼容性大比拼【转】
- yum install出错问题
- 关于serialVersionUID的说明
- 使用lua实现几个小算法
- css简写属性格式
- Struts2从一个action转到另一个action的两种方法
- Android 中 View 炸裂特效的实现分析
- HashMap的应用,CF650A
- Hdu 1050
- IOS的KVO不能监听的场景
- Mac终端常见命令
- HDU 2473 Junk-Mail Filter(并查集删点)
- ft上线蛋疼问题
- 数值最优化