//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。
如果有更好的方法还望在评论中告知。
网友评论