2010-03-30 40 views
11

我們正在爲iphone開發人員編寫一個API,我們不知道異常處理的最佳做法。我們研究了標準POSIX方式NSErrorNSException當爲iPhone編寫API時,什麼是錯誤處理的最佳實踐?

大多數API使用的約定是什麼?哪一個最「Objective-C友好」?

+0

這個問題可能是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

回答

14

Introduction to Exception Programming Topics

重要:你應該保留使用異常的編程或意外的運行時錯誤,如外的界限收集訪問,試圖改變一個不可改變的對象,發送一個無效消息,並失去與窗口服務器的連接。在創建應用程序時而不是在運行時,您通常會處理這些異常類型的異常。

...

相反例外,錯誤對象(NSError)和可可錯誤傳送機制在Cocoa應用程序進行通信預計錯誤的推薦方式。有關更多信息,請參閱Error Handling Programming Guide For Cocoa

所以,據我所知,只有在發生某些致命錯誤時才使用異常。否則,請使用NSError對象。

2

+1 for NSError

我忘記了在哪裏閱讀了Apple文檔,但我也回想起他們鼓勵「先嚐試,然後檢查錯誤」的編碼哲學,而不是「檢查有效性,然後執行操作」。例如,在使用之前,不要查看網絡是否可用,只要嘗試使用它並在出現錯誤時迴應錯誤。

我同意這個理念,因爲(a)它將有效性檢查移動到動作時刻,因此在某種意義上它更準確,而且(b,主觀),使用代碼更有趣這種模式。總之,建議使用NSError,並提供NSError**參數的即時反饋,該參數接受NULL,以便對您的API用戶非常友好!這種模式也在Cocoa/Touch的幾個地方建立起來;例如NSString方法writeToFile:atomically:encoding:error: