2014-11-04 95 views
1

由於應用程序啓動生命,我只想詢問用戶的位置。 我的意思是,每當用戶啓動應用程序,請求他的位置服務(只有一次)。使用dispatch_once啓動位置服務

我以爲這樣做與dispatch_once

static dispatch_once_t oncePredicate; 

dispatch_once(&oncePredicate, ^{ 

    [self.locationManager startUpdatingLocation]; 
}); 

這是否是最好的方法呢?或者有更好的方法?

在此先感謝!

+1

此代碼是什麼?爲什麼你擔心它可能會運行不止一次,如果它發生了副作用會是什麼? – Wain 2014-11-04 09:14:53

+0

謝謝@Wain,這段代碼是可以多次發生的。我並不擔心,我會詢問最佳實踐......副作用應該是用戶的位置問題(我知道它只提問一次,但問題的時間對我來說很重要) – gran33 2014-11-04 09:17:27

回答

1

一般來說,您不必擔心多次撥打startUpdatingLocation。相反,你應該做的是添加邏輯,以確保它只在適當時被調用 - 即在它對用戶有意義之後。

通常,這意味着在調用startUpdatingLocation之前存儲某個狀態,可能是用戶默認值,並檢查該狀態。特別是,只有當用戶到達應用程序中的特定階段時纔會設置狀態,在這個階段請求他們許可是明智的(並且他們已經批准,儘管此檢查需要更頻繁地進行,因爲他們稍後可能會決定撤銷該檢查授權權限)。

相關問題