2011-10-13 39 views
7

Chỉ cần cố gắng tìm ra phương pháp hay nhất: khi sử dụng phương pháp mất (NSError**), tốt hơn là gửi nó nil hoặc NULL?"lỗi: NULL" hoặc "lỗi: nil"?

Ví dụ,

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

Trong tài liệu hướng dẫn nó nói "Bạn có thể chỉ định con số không cho tham số này nếu bạn không muốn những thông tin lỗi." Mặt khác, vì con trỏ kép của nó, NULL dường như cũng có ý nghĩa?

Trả lời

10

Về mặt kỹ thuật, NULL là câu trả lời đúng và tài liệu sai.

Trong thực tế, điều đó không quan trọng. NULLnil là giống nhau, cho mọi mục đích và mục đích.

Mặc dù điều đó có thể thay đổi và vẫn tuân thủ theo ngôn ngữ, nhưng nó không thể thay đổi mà không vi phạm tấn và tấn công cụ.

Tuy nhiên, vui lòng gửi lỗi.

+4

Chúng khác nhau về loại của chúng. Tất cả chúng đều bằng không, nhưng "NULL" là một void *, "nil" là một id, và "Nil" là một con trỏ Class. http://stackoverflow.com/questions/1564410/when-to-use-nil-and-null-in-objective-c – ARC

+0

Yup; Cảm ơn các liên kết. Và đây là lý do tại sao, trong trường hợp này, nó phải là NULL, bởi vì nil/Nil không đại diện cho con trỏ tới con trỏ tới các kiểu; nó sẽ kết thúc là một cái gì đó như (void * id *) hoặc một số vô nghĩa như vậy cast. – bbum

+0

Xin cảm ơn các bạn. Những gì tôi đang lo lắng là nếu 'NULL' bằng cách nào đó đã dereferenced trong phương pháp, nó sẽ không gây ra vấn đề? Theo bài đăng này [http://stackoverflow.com/questions/3581544/exception-codes-kern-protection-failure-at-0x00000000-error], 'nil' có vẻ là lựa chọn an toàn hơn? –

Các vấn đề liên quan