无奈,无赖,谁来拯救你!
2015-07-19 本文已影响49人
司马捷
1.在ios中很多操作在异步操作的时候需要等待,异步操作完成时候,我们有时候会这样处理:
while (!isFinish) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
当然采取同步的就不说了.
2.这个时候,如果当前线程是线程.一直在空转,在这里等待.同时又处理主线程其他消息源过来得消息.
突然在其他次线程中需要在主线程执行的操作.
[self performSelectorOnMainThread:@selector(trytoDoConnect) withObject:nil waitUntilDone:YES];
这是时候UntilDone 是YES 和NO 就很关键了.主线程已经被阻塞了.现在要执行的操作是否是被立即执行,需要靠YES和NO,决定.YES,立即派发.NO则是在等待队列中排队.
3.还没完呢,这个时候第二部的主线程的操作需要循环执行,而且需要等待5秒中以后循环执行.等待5秒钟,这个时候就有意思了.
NSDate *loopUntil = [NSDate dateWithTimeIntervalSinceNow:5];
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:loopUntil];
线程等待5秒,这个确实是在等待5秒,但是这个方法使用后,我顿时毛骨悚然,程序完全超出了我的控制范围.我都不知道我写的是什么了.
4.其实这里就是总结下思路,我也是菜鸟不是很多这里线程的跳转,管他三七二十一.
sleep(5);
睡觉总会吧,睡5秒先.
和下面的方法
[NSThread sleepForTimeInterval:5];
5.善用NSDate 时间控制,和NSTimer.控制.
6.唉,最近感觉写一行代码,都好累,不会写了。开始怀疑自己是否适合干这行了。