IOSbug

无奈,无赖,谁来拯救你!

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];

区别不是很大.参考链接:http://stackoverflow.com/questions/3155586/what-is-the-difference-among-sleep-usleep-nsthread-sleepfortimeinterval

5.善用NSDate 时间控制,和NSTimer.控制.

6.唉,最近感觉写一行代码,都好累,不会写了。开始怀疑自己是否适合干这行了。

上一篇下一篇

猜你喜欢

热点阅读