我有一個應用程序需要每隔一分鐘左右更新一次顯示。爲了達到這個目的,我使用了performSelector:withObject:afterDelay,調用大部分時間只是基於非常簡單(快速)計算來改變標籤中的某些文本的選擇器。調試無響應的iPhone UI
[self performSelector:@selector(updateDisplay) withObject:nil
afterDelay:60];
偶爾在更新過程中,我必須去,並且從網上得到一些數據,所以我這樣做,在另一個線程使用detachNewThreadSelector。這一切都奏效了,「延遲之後的performSelector」調用在極短的時間內完成,並且每分鐘只運行一次。儘管如此,儘管在模擬器上運行良好,但應用程序中的單個按鈕很大程度上沒有響應,沒有響應多個刺傷。
所以,我假設peformSelector:afterDelay不會阻塞,但我現在想知道它是否以某種方式阻塞?我甚至嘗試過不做網絡查詢,這在某種程度上仍然影響了響應能力。沒有快樂。
[NSThread detachNewThreadSelector:@selector(updateFromURL)
toTarget:self withObject:nil];
我然後推它通過鯊魚,看看我能看到任何明顯。從這裏我可以看到網絡查找是唯一需要花費的時間,但它只是每隔幾分鐘完成一次,然後顯然不在主線程上運行。該應用程序本身在20分鐘內消耗了CPU的1%(0.0000034%)的一小部分,所以它只是一個阻塞問題。
所以,我缺少一些關於performSelector:afterDelay?我可能會犯什麼其他常見的新手錯誤。如果有幫助,儘管我已經開發了20多年的應用程序,但前10個主要是Java。也許我有一個Java假設加載:-)基本上我假設主線程就像EDT(只做UI的東西,但保持一切關閉它)。
沒有多重請求問題,它沒有收到第一個請求。我做了一些重要的分析,沒有任何實際價值(除非表明應該沒有問題)。我現在重新考慮了因素,並使用了一個計時器,而不是performSelector:afterDelay,它似乎有所幫助,我懷疑這裏有一些微妙的運行循環。 – rougeExciter