1.在ios中很多操作在異步操作的時(shí)候需要等待,異步操作完成時(shí)候,我們有時(shí)候會(huì)這樣處理:
while (!isFinish) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
當(dāng)然采取同步的就不說(shuō)了.
2.這個(gè)時(shí)候,如果當(dāng)前線程是線程.一直在空轉(zhuǎn),在這里等待.同時(shí)又處理主線程其他消息源過(guò)來(lái)得消息.
突然在其他次線程中需要在主線程執(zhí)行的操作.
[self performSelectorOnMainThread:@selector(trytoDoConnect) withObject:nil waitUntilDone:YES];
這是時(shí)候UntilDone 是YES 和NO 就很關(guān)鍵了.主線程已經(jīng)被阻塞了.現(xiàn)在要執(zhí)行的操作是否是被立即執(zhí)行,需要靠YES和NO,決定.YES,立即派發(fā).NO則是在等待隊(duì)列中排隊(duì).
3.還沒(méi)完呢,這個(gè)時(shí)候第二部的主線程的操作需要循環(huán)執(zhí)行,而且需要等待5秒中以后循環(huán)執(zhí)行.等待5秒鐘,這個(gè)時(shí)候就有意思了.
NSDate *loopUntil = [NSDate dateWithTimeIntervalSinceNow:5];
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:loopUntil];
線程等待5秒,這個(gè)確實(shí)是在等待5秒,但是這個(gè)方法使用后,我頓時(shí)毛骨悚然,程序完全超出了我的控制范圍.我都不知道我寫(xiě)的是什么了.
4.其實(shí)這里就是總結(jié)下思路,我也是菜鳥(niǎo)不是很多這里線程的跳轉(zhuǎn),管他三七二十一.
sleep(5);
睡覺(jué)總會(huì)吧,睡5秒先.
和下面的方法
[NSThread sleepForTimeInterval:5];
區(qū)別不是很大.參考鏈接:http://stackoverflow.com/questions/3155586/what-is-the-difference-among-sleep-usleep-nsthread-sleepfortimeinterval
5.善用NSDate 時(shí)間控制,和NSTimer.控制.
6.唉徒扶,最近感覺(jué)寫(xiě)一行代碼螟炫,都好累椎镣,不會(huì)寫(xiě)了。開(kāi)始懷疑自己是否適合干這行了庶艾。