2011-10-13 128 views
7

試圖找出最佳做法是什麼:使用方法需要(NSError**)時,最好發送它nilNULL「錯誤:NULL」或「錯誤:無」?

例如,

NSArray *items = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:NULL];

在本文檔中,它說:「你可能會爲此參數指定爲零,如果你不希望錯誤的信息。」另一方面,由於它是一個雙指針,NULL似乎也有意義呢?

回答

10

從技術上講,NULL是正確的答案,文檔是錯誤的。

實際上,它並不重要。對於所有意圖和目的,NULLnil是相同的。

雖然這可能會改變並保持語言兼容性,但如果不破壞大量的東西,它就不會改變。

儘管如此,請隨時提交錯誤。

+4

它們的類型不同。它們都是零,但「NULL」是一個void *,「nil」是一個id,「Nil」是一個Class指針。 http://stackoverflow.com/questions/1564410/when-to-use-nil-and-ullull-in-objective-c – ARC

+0

是的;感謝您的鏈接。這就是爲什麼在這種情況下它應該是NULL,因爲nil/Nil既不表示指向類型的指針;它最終會變成(void * id *)或者這樣的廢話。 – bbum

+0

謝謝你們。我擔心的是,如果'NULL'以某種方式在方法中被取消引用,是不是會導致問題?根據這篇文章[http://stackoverflow.com/questions/3581544/exception-codes-kern-protection-failure-at-0x00000000-error],'nil'似乎是一個更安全的選擇? –