Selector 有什么用途?

我们会在几个地方应用selector


1. Target/Action
在Interface Builder中建立了一个UIButton或是NSButton控件,然后将按钮连接到controller中IBAction的method上,这时候我们的Controller就是Button的target,而要求controller执行的method就叫做action。
action就是一个selector。


2. 检查method是否存在
检查某个对象是否有某个method,只要呼叫 respondsToSelector: 就可以了
if([myObject respondsToSelector:@selector(doSomething)]){
//...
}


3. Timer

NSObject除了 performSelector: 这个method之外,同样以 performSelector 开头的还有好几组。
performSelector:withObject:afterDelay: 就可以让我们在一定的秒数之后才要求某个method执行

[self performSelector:@selector(doSomething) withObject:nil afterDelay:1.0];
如果时间还不到预定的要执行的时间,method还没有执行,我们也可以反悔,取消刚才预定的要执行的method
[NSObject cancelPreviousPerformRequestsWithTarget:self];

performSelector:withObject:afterDelay: 的效果相当于产生 NSTimer 对象,当我们想要延迟呼叫某个method,或是要重复执行,都可以通过建立 NSTimer 对象达成,要使用timer,我们也必须使用selector语法。
我们先定义一个timer要做的事情:
- (void)doSomething:(NSTimer *)timer
{
	//todo...
}
然后通过 doSomething: 的 selector 建立 timer
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:someObject selector:@selector(doSomething:) userInfo:nil repeats:YES];

4. 在某个Thread执行method
假如有一件事情会执行的太久,我们可以将这件事情丢到后台,也就是另外建立一条Thread执行:
[self performSeclorInBackground:@selector(doSomething:) withObject:nil];
注意,再后台执行时,这个method的内部需要建立自己的 Auto-Release Pool。
执行完毕后,通过 performSelectorOnMainThread:withObject:waitUntilDone:,通知主Thread我们已经把事情做完了。比如,我们要转换一个比较大的档案,就可以在后台实际转换,转换之后在告诉主Thread,在UI上跳出提示窗口,提示试用装已经转换完毕。
- (void)doSomething
{
	@autorealsepol{
		//do something here
		[self performSelectorOnMainThred:@selector(doAnotherThing) withObject:nil waitUntilDone:NO];
	}
}

}


5. Array
我们也可以通过传递selector,要求Array里头每一个都执行一次指定的method
[anArray makeObjectsPerformSelector:@selector(doSomething)];




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值