美文网首页
延时任务

延时任务

作者: 每日总结 | 来源:发表于2016-06-23 21:45 被阅读58次
    //1.
    [self performSelector:@selector(hideHUD) withObject:nil afterDelay:1.5];
    //2.
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW), (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        self.hud.alpha = 0.0;
    });
    //3.
    [NSTimer scheduledTimerWithTimeInterval:1.5  target:self selector:@selector(hideHUD) userInfo:nil repeats:NO];
    

    注意

    1.performSelector方法和NSTimer方法都是在主线程中进行的,原理是利用runloop实现的。
    runloop是一个死循环,一般只有主线程中的runloop是激活的,所以在子线程中performSelector方法和NSTimer方法都不会生效。
    而GCD的dispatch_after方法就不会有这个问题。
    2.NSTimer在使用时要注意target的对象是强引用对象。
    我们一般使用NSTimer的时候喜欢将实例设置为ViewController的属性,这样如果我们不在view消失时将NSTimer失效掉,会导致ViewController无法释放。
    我目前使用的方法是在viewWillAppear方法中对NSTimer实例进行初始化设置,然后在viewWillDisappear方法中将NSTimer实例进行失效处理(invalidate)并置nil。
    如果有更好的方法还望在评论中告知。

    相关文章

      网友评论

          本文标题:延时任务

          本文链接:https://www.haomeiwen.com/subject/xdkodttx.html