[英]Idle thread approach in iOS
我正在嘗試建立一個在新數據可用之前一直處於空閑狀態的線程。 在Objective-C中,最好的方法是什么? 到現在為止,我一直試圖做一個簡單的運行循環
while(YES) {
if(isDataAvailable) {
//process data
}
}
但是,這對性能有很大的影響,我的FPS從40下降到20,並且接口變得不可用(即使實際的數據處理[NSThread sleepForTimeInterval:0.01]
發生一次,並且對CPU來說也不是很[NSThread sleepForTimeInterval:0.01]
。我嘗試添加[NSThread sleepForTimeInterval:0.01]
最后, [NSThread sleepForTimeInterval:0.01]
,但是這樣我丟失了數據包(“過程數據”指的是一些與流相關的操作,隊列和非隊列數據包),但是FPS恢復正常。
我是Objective-C的新手,我在想也許有更好的方法可以做到這一點? 我還查看了NSRunLoop,但沒有設法使其像運行循環一樣工作:),僅向其附加了一個計時器,該計時器的作用不超過我的[NSThread sleepForTimeInterval:0.01]
。
非常感謝您的任何幫助:D
如果需要使輔助線程保持活動狀態,則肯定要使用真正的運行循環: http : //developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#// apple_ref / doc / uid / 10000057i-CH16-SW1
基本上,只需創建並啟動線程,設置一個自動釋放池,然后在一定的設置時間內運行runloop。 時間到時,您檢查是否應該退出線程,還是再次進入運行循環。
正如Marcelo指出的那樣,有更多現代方法可以實現並發(GCD和異步分派是幾個示例),因此也許也可以研究其他形式的並發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.