2011-09-19 73 views
0
[NSThread detachNewThreadSelector:@selector(addressLocation:) toTarget:self withObject:parameter]; 

[self addressLocation:parameter]; 

這兩個語句應該做同樣的事情嗎?因爲他們中的一個(第二個)給了我一個準確的結果,另一個一直給我一個非洲海岸的隨機位置。從我讀過的,他們都應該做同樣的事情;用參數'參數'執行addressLocation。唯一的區別是線程,但它正在訪問一個全局易變的變量,所以這應該不重要,應該嗎?NSThread參數問題

+0

剛剛解決了它 - 使用變量的後面的代碼在位置被獲取之前正在執行。這就是看似隨機位置的原因。 –

回答

1

線程比這複雜得多。當你調用detachNewThreadSelector時,你正在創建一個新的線程,但是沒有簡單的方法讓你知道這個調用何時完成。它可以在調用線程中的下一行代碼之前或幾秒鐘後完成。

如果您先創建線程,然後可以使用performSelector:onThread:withObject:waitUntilDone,您應該得到與使用[self addressLocation:parameter]相同的結果。這不會對你有很大的幫助,因爲當你等待結果時,你的主線程將無所作爲。

有很多方法可以從線程獲取數據 - 例如,我喜歡從輔助線程調用performSelectorOnMainThread以將數據發送回主線程。

我會閱讀Grand Central Dispatch,看看它是否適合您的需求。