2012-05-11 27 views
0

我注意到,在我的應用程序中,當我打電話給startUpdatingLocation時,我的UI簡要鎖定,而我認爲設備收集位置數據。這是典型的,有什麼辦法來限制嗎?繼承人我的代碼看起來像CLLocationManager startUpdatingLocation造成滯後

-(void)getUserLocation { 
    if (!locationManager) 
    { 
     locationManager = [[CLLocationManager alloc]init]; 
    } 

    [locationManager setDelegate:self]; 
    [locationManager startUpdatingLocation]; 

} 

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 

    self.userCoordinate = newLocation.coordinate; 

    NSLog(@"user coordinate in location manager: %f,%f",self.userCoordinate.latitude,self.userCoordinate.longitude); 
    [locationManager stopUpdatingLocation]; 
    locationManager = nil; 

    userLocationAvailable = YES; 
    [self getDataForScrollView]; 

} 

什麼想法?謝謝!

回答

1

這是因爲您正在獲取主線程中的位置,而主線程用於負責UI內容。即用戶觸摸事件。這就是爲什麼你覺得你的應用有點滯後。

如果您在主線程中執行大型任務(例如從Web服務器獲取數據),這很正常。您可以放置​​一個「加載」旋轉視圖來指示用戶,而不是讓您的UI凍結。

或者,您可以嘗試在另一個線程中獲取位置。我也試圖做到這一點,但我還沒有成功。所以我目前正在採取第一種方法。

+0

我試圖把它放在後臺隊列中無濟於事。 –

0

您可能會從後臺查看我對位置服務的使用中受益。實質上,我在主線程中設置了位置管理器,但接收到位置事件的所有處理都是在後臺線程上完成的。

這將允許您的主線程繼續而不會阻塞。

在這裏看看代碼TTLocationHandler GitHub Repository

相關問題