2014-06-15 48 views
0

我試圖解決一個問題,我可以看到我的iDevice,但不是在我的Mac(顯然)。用'dataWithData` +非阻塞線程的高CPU活動

我已經標在這條線非常高的CPU活動:

data = [NSData dataWithData:UIImageJPEGRepresentation(image, 1.0)]; 

這似乎當我下載和顯示高清畫面(4-5Mo)。

我的代碼有什麼問題,或者我正在做一些非常糟糕的事情?

編輯 最後這條線並不重要。我的問題是我認爲我的異步方法在另一個線程中。事實並非如此。

我開始思考新線程:

[NSThread detachNewThreadSelector:@selector(test:) toTarget:self withObject:myObject]; 

對於我的問題,是它做的最好方法是什麼?

謝謝你的幫助。

回答

0

有一個解決方案here很好地解釋了使用NSManagedObjectContext與孩子的非阻塞線程的問題。

對於其他問題(高CPU活動)是由於這個非阻塞線程問題。

0

基本上,只要有可能,CPU密集型操作都應該在後臺線程上執行,以避免阻止應用程序中的任何用戶交互。希望你正在處理這件事。

此外,您正在進行的與圖像構建/操作相關的過程往往是CPU密集型的。

+0

一切都背景明顯,但我擔心此操作正在進行的時間。我不知道這個行動的平均持續時間。你有這方面的參考嗎?也許存在一個數學函數來根據圖片的大小/分辨率計算治療的持續時間? 如果我可以預測持續時間,我可以根據需要調整圖片的大小。 – BriceB

+0

你在想這個。 JPEG壓縮是CPU密集型的。如果您使用GCD在後臺執行工作,則不會阻止用戶界面。讓它運行。 –

+0

我發現了我的問題的一部分。我認爲asynchrone下載是在另一個線程上,但最後不是。我試着用'NSThread' detachNewThreadSelector:toTarget:withObject:'來做到這一點,但我無法阻止它。這意味着我每次打電話給我的方法都會有新的泄漏。 – BriceB