- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay调用没有作用的原因以及解决方法

知识点:这个方法是单线程的,也就是说只有当前调用此方法的函数执行完毕后,selector方法才会被调用。

- (void)mainMethod
{   
    [self performSelector:@selector(delayMethod) withObject:nil afterDelay:1];

    NSLog(@"调用方法==开始");
    
    sleep(5);
    
    NSLog(@"调用方法==结束");
}

- (void)delayMethod
{
    NSLog(@"执行延迟方法");
}

执行结果(注意log打印的顺序):

  调用方法==开始
  调用方法==结束
  执行延迟方法

 实战经验:正因为本方法是一个单线程的,所以有些时候,我们会遇到虽然调用了这个方法,但是不执行的问题。

知识点:该方法只能接受一个参数。如果需要传递多个参数怎么办呢? 让selector调用的方法接受的参数类型修改为Dictionary类型。

注意: 

(1)如果调用的selector不接受参数则,withObject:nil 

(2) 通过performSelector:withObjcet:afterDelay调用的方法不能有返回值

 解决方法:用GCD

posted @ 2015-12-15 15:19  蜗牛d  阅读(315)  评论(0)    收藏  举报