用過發現GCD真的是最容易用的一個(點頭
這是用GCD仿製NSTimer,讓這個名叫action的thread每0.1秒醒來去執行prepareAction的方法
相較於NSTimer的優勢在於:
一旦用了多工,NSTimer要是不在同條線上是關不掉的!
然後關了又開開了又關⋯⋯開了幾個就累積幾個同樣的timer
用GCD的寫法既可以多工又不用怕要怎麼處理關掉的情況(起碼actionFlag是在main thread去設定的),只要block內的程式碼結束了這條新開的thread就會被回收走了
BTW, GCD中用NSTimer是沒有反應的
BTW2, 要重複執行的方法一樣是在action thread裡run
還有記得更新UI的時候要把它拉去main thread去執行
(同場加映stackoverflow問答:Timer inside global queue is not calling in iOS)
dispatch_async(dispatch_queue_create("action", nil), ^{
//flag關掉thread會自己結束
while (actionFlag) {
[self prepareAction];
[NSThread sleepForTimeInterval:0.1f];
}
});
話說要如何改寫?
把NSTimer scheduledTimerWithTimeInterval的部分直接用上述程式碼取代,selector跟Interval放進while(repeats=YES)裡
沒有留言:
張貼留言