2009-08-11 52 views
1

我是新來的目標C和Mac開發......看來我可以在我的應用程序中使用Posix線程API ..這是推薦的方式嗎?或者是他們的一些蘋果API我應該用於互斥,條件變量和線程?用於iPhone開發的推薦線程層?

我應該補充說我正在爲iPhone開發。

我想添加我正在嘗試做的事。基本上,CoreLocation是異步的...你告訴它開始更新你,然後它只是週期性地調用你的更新方法...

我遇到的問題是我需要另一個線程來阻塞,直到發生更新...我怎樣才能使主應用程序線程阻塞,直到至少有一個CoreLocation更新發生?他們是一個NSConditionVariable? :)

回答

1

而不是阻止用戶界面掛起,我會建議顯示某種加載屏幕,直到您收到您的第一次更新。在可能會是這個樣子:

- (void)viewDidLoad { 
    ... 
    [myCLLocationManager beginUpdates]; 
    [self showLoadingIndicator]; 
    .... 
} 

- (void)locationManager:(CLLocationManager *)manager didReceiveUpdates { 
    [self hideLoadingIndicator]; 
    // Additionally load the rest of your UI here, if you haven't already 
} 

不要引用我的方法調用逐字,但這是我提出如何解決你的問題,在本質。

6

我建議一個更簡單的方法卡住成線是使用下面的調用:

[self performSelectorInBackground:(@selector(myMethod)) withObject:nil]; 

這會自動創建一個新的後臺線程讓你在運行順便確保你的你的背景裏面方法如下:

-(void) myMethod { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    // code you want to run in background thread; 
    [pool drain]; 
} 

這是必要的,因爲沒有一個默認的自動釋放池設置任何線程除了一個主。

最後,談到阻塞主線程,你可以使用從後臺線程下面這樣做:

​​

可選的第三個參數將托起你的主線程,如果你想讓它這樣做。

希望幫助!

+0

+1這非常有用。非常感謝。 – 2010-09-14 20:12:14

1

是的,有一個NSCondition對象,它可能會完全符合你所提到的CoreLocation場景。