2013-07-04 17 views
1

ios中的代碼是required委託方法? 例子:類型爲'required'的代表

CLLocationManagerDelegate 

locationManagerDidPauseLocationUpdates: 
Tells the delegate that location updates were paused. (required) 

問題是關係到最後一個字:「(必填)」

我知道有可選的委託方法,但如果我不落實 所有必需的會發生什麼代表?

特別是我在我的應用程序中沒有實現上述方法,它使用LocationManager, SDK是ios6,target = ios5。

如果我沒有實現該方法,我的應用程序可能會崩潰嗎? 我最近移植到ios6,但直到現在它沒有崩潰!
那個方法還沒有被調用,或者是需要推薦的運氣嗎?

更新:

上面的信息是ios6.1的Docu集。

當我打開ios6.1頭文件

LocationManager.h:

* Discussion: 
* Invoked when location updates are automatically paused. 
*/ 
- (void)locationManagerDidPauseLocationUpdates:(CLLocationManager *)manager __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_6_0); 

沒有爲不需要暗示,他們都是@optional標籤下

回答

2

它可能會崩潰,我們可以得到儘可能接近。一般來說,這意味着如果你沒有實現它,某些東西就無法工作,但是文檔不夠精確。在某些情況下,使用委託的類不會檢查委託是否實際實現了指定的方法,因此無論何時被調用,您都會遇到異常。所以,如果文檔說需要最好實現它,即使你的實現是一個空方法。

+0

告訴我一兩件事是可以不執行在協議中聲明所需的方法和你不符合誰該協議的類定義的呢? – iEinstein

+0

有可能不實現所需的方法,但它不是一個好主意(你通常會得到一個關於它的編譯警告) – Wain

+0

只有警告出現並崩潰? – iEinstein

1

在這種特殊情況下,在iOS 6(及更新版本)操作系統上調用「locationManagerDidPauseLocationUpdates」來通知您的應用程序該位置未更改,並且正在關閉以節省電量。

在iOS 5,此委託方法將不會被調用,但如果你實現它,它就會得到叫的iOS 6

如果定位到iOS 6(而不是iOS 5中),你」如果你沒有實現任何「需要」的委託方法,會得到編譯器警告。

+0

在LocatioManager.h沒有提示所需: – AlexWien