我們正在爲iphone開發人員編寫一個API,我們不知道異常處理的最佳做法。我們研究了標準POSIX方式NSError
,NSException
當爲iPhone編寫API時,什麼是錯誤處理的最佳實踐?
大多數API使用的約定是什麼?哪一個最「Objective-C友好」?
我們正在爲iphone開發人員編寫一個API,我們不知道異常處理的最佳做法。我們研究了標準POSIX方式NSError
,NSException
當爲iPhone編寫API時,什麼是錯誤處理的最佳實踐?
大多數API使用的約定是什麼?哪一個最「Objective-C友好」?
從Introduction to Exception Programming Topics:
重要:你應該保留使用異常的編程或意外的運行時錯誤,如外的界限收集訪問,試圖改變一個不可改變的對象,發送一個無效消息,並失去與窗口服務器的連接。在創建應用程序時而不是在運行時,您通常會處理這些異常類型的異常。
...
相反例外,錯誤對象(NSError)和可可錯誤傳送機制在Cocoa應用程序進行通信預計錯誤的推薦方式。有關更多信息,請參閱Error Handling Programming Guide For Cocoa。
所以,據我所知,只有在發生某些致命錯誤時才使用異常。否則,請使用NSError
對象。
+1 for NSError
。
我忘記了在哪裏閱讀了Apple文檔,但我也回想起他們鼓勵「先嚐試,然後檢查錯誤」的編碼哲學,而不是「檢查有效性,然後執行操作」。例如,在使用之前,不要查看網絡是否可用,只要嘗試使用它並在出現錯誤時迴應錯誤。
我同意這個理念,因爲(a)它將有效性檢查移動到動作時刻,因此在某種意義上它更準確,而且(b,主觀),使用代碼更有趣這種模式。總之,建議使用NSError
,並提供NSError**
參數的即時反饋,該參數接受NULL
,以便對您的API用戶非常友好!這種模式也在Cocoa/Touch的幾個地方建立起來;例如NSString
方法writeToFile:atomically:encoding:error:。
這個問題可能是http://stackoverflow.com/questions/1503348/returning-errors-in-objective-c和http://stackoverflow.com/questions/2169728/how-should-c-手柄錯誤 - 在-AN-API – 2010-03-30 16:34:08