iOS之《Effective Objective-C 2.0》读书笔记(42)

第42条:多用GCD,少用performSelector系列方法

1.直接调用某方法
  • 两种方式:
//方法一:
 -(id)performSelectoer:(SEL)selector
//方法二:
 [object selectorName];
  • 方法一的缺点:内存管理容易有缺失–>selector是在running time才决定的,这就是它的强大之处。这就等于在动态绑定之上再次使用动态绑定,因而可以实现出下面这种功能
SEL selector;
if ( / some condition / ) {

    selector = @selector(newObject);//newObject返回一个new object

} else if ( / some other condition / ) {

    selector = @selector(copy); // copy根据当前object copy出一个新的object

} else {

    selector = @selector(someProperty));// someProperty可以认为是对象的某个property

}
id ret = [object performSelector:selector];
2.发消息时顺便传递参数
  • 此方法使用的局限性:
    (1)由于参数类型是id,所以传入的参数必须是对象才行。如果选择子所接受的参数是整数或浮点数,那就不能采用这些方法了
    (2)选择子最多只能接受两个参数,在参数不止两个的情况下,则没有对应的performSelector方法能够执行这种选择子
-(id)performSelector:(SEL)selector withObject:(id)object;  
-(id)performSelector:(SEL)selector withObject:(id)objectA withObject:(id)objectB;
3.提供的线程功能
  • 优先使用GCD
//方法一:
 -(void)performSelector:(SEL)selector onThread:(NSThread *)thread waitUntilDone:(BOOL)wait;  
 -(void)performSelectorOnMainThread:(SEL)selector withObject:(id)argument waitUnitlDone:(BOOL)wait; 

//方法二:
dispatch_async(dispatch_get_main_queue(), ^{
    [self doSomething];
});
4.延迟执行:
  • 优先使用GCD
//方法一:
-(void)performSelector:(SEL)selector withObject:(id)argument afterDelay:(NSTimeInterval)delay;  

//方法二:
dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC));
dispatch_after(time, dispatch_get_main_queue(), ^{
    [self doSomething];
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值