2011-10-13 16 views
7

Po prostu próbuje dowiedzieć się, jaka jest najlepsza praktyka: podczas korzystania z metody, która ma (NSError**), czy lepiej wysłać go nil lub NULL?"błąd: NULL" lub "error: zero"?

Na przykład

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

W dokumentacji jest napisane „Można podać zero dla tego parametru, jeśli nie chcesz, aby informacje o błędzie.” Z drugiej strony, ponieważ jest to podwójny wskaźnik, NULL również wydaje się mieć sens?

Odpowiedz

10

Pod względem technicznym, NULL jest właściwą odpowiedzią, a dokumenty są błędne.

W praktyce nie ma znaczenia. NULL i nil są takie same, do wszystkich celów i celów.

Chociaż może się to zmienić i zachować zgodność z językiem, nie może się zmienić bez rozbicia ton i ton rzeczy.

Możesz jednak zgłosić błąd.

+4

Różnią się one w swoich typach. Wszystkie są zerowe, ale "NULL" jest pustą *, "nil" jest identyfikatorem, a "Nil" jest wskaźnikiem klasy. http://stackoverflow.com/questions/1564410/when-to-use-nil-and-null-in-objective-c – ARC

+0

Yup; dzięki za link. I dlatego w tym przypadku powinno być NULL, ponieważ zero/zero ani nie oznaczają wskaźników do wskaźników do typów; skończyłoby się na czymś w rodzaju czegoś (void * id *) lub jakiegoś takiego bzdurnego nonsensu. – bbum

+0

Dzięki chłopaki. Martwię się, że jeśli 'NULL' w jakiś sposób zostanie usunięty z procesu, czy nie spowoduje problemów? Zgodnie z tym postem [http://stackoverflow.com/questions/3581544/exception-codes-kern-protection-failure-at-0x00000000-error], 'nil' wydaje się być bezpieczniejszym wyborem? –

Powiązane problemy