performSeletor:after
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;
上述方法用于延迟执行一个函数,aSelector为需要延迟执行的函数名,anArgument为函数的参数,delay为延迟的时间
其原理是基于定时器,这就涉及到runloop和线程啦
该方法是在调用时向所在线程对应的runloop中加入定时器事件,
如果是在主线程调用performSeletor:after:函数,则向主线程的runloop中加入定时器事件
如果在子线程中调用performSeletor:after:函数,该方法会失效,即并不会执行需要延迟的函数,这是因为子线程的runloop默认不开启,所以无法添加定时器事件,因此延迟执行不生效
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(handleCleanFinished:) object:nil]
取消延迟执行的函数,参数应保持一致,否则无法取消。
值得注意的是,两个函数的执行应保持在同一个线程,否则取消延迟执行失效。
- (void)performSelector:(SEL)aSelector onThread:(NSThread*)thr withObject:(id)arg waitUntilDone:(BOOL)wait;
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;