多用GCD,少用PerformSelector

For example, to perform a task after a delay, you should prefer the latter to the
former:
// Using performSelector:withObject:afterDelay:
[self performSelector:@selector(doSomething)
withObject:nil
afterDelay:5.0];
// Using dispatch_after
dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW,
(int64_t)(5.0 * NSEC_PER_SEC));
dispatch_after(time, dispatch_get_main_queue(), ^(void){
[self doSomething];
});
To perform a task on the main thread:
// Using performSelectorOnMainThread:withObject:waitUntilDone:
[self performSelectorOnMainThread:@selector(doSomething)
withObject:nil
waitUntilDone:NO];
// Using dispatch_async
// (or if waitUntilDone is YES, then dispatch_sync)
dispatch_async(dispatch_get_main_queue(), ^{
[self doSomething];
});
Things to Remember
The performSelector family of methods is potentially dangerous with respect to
memory management. If it has no way of determining what selector is going to be
performed, the ARC compiler cannot insert the appropriate memory-management calls.
The family of methods is very limited with respect to the return type and the number of
parameters that can be sent to the method.
The methods that allow performing a selector on a different thread are better replaced
with certain Grand Central Dispatch (GCD) calls using blocks.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值