调用一个带有我不打算使用的完成处理程序的函数,我是使用 nil、NULL 还是其他什么?

Calling a function that takes a completion handler that I'm not going to use, do I use nil, NULL or something else?

当调用一个将完成处理程序作为其参数之一的方法时,如果我不打算使用它,那么使用什么参数是合适的? 例如

 [self.navigationController dismissViewControllerAnimated:YES completion:NULL];

有很多 NULL 和 nil 之间差异的示例,我认为 NULL 是因为我认为完成处理程序更像是 C++ 的东西,而不是特定于 Objective-c,但我可能会咆哮错误的树。

我是使用 NULL、nil 还是其他什么?

编辑: 抱歉,我应该说得更清楚,我知道 nil 和 NULL 是等价的,并且惯例是将 nil 用于对象,将 NULL 用于指针。我想问更多有关我使用哪个完成处理程序的问题。

Apple 至少在他们的一些 Objective-C 文档中使用 NULL。这里是 an example

有关 Objective-C 中 nil 与 NULL 的一般性讨论,请参阅 this SO

我刚刚在 Obj-C 中使用 NULL 来匹配 Apple 的文档。在 Swift 中,使用 nil。

Xcode 有一个 "Jump to Definition" 功能可以用来回答这个问题。

nil 开始将我们带到 MacTypes.h

#define nil __DARWIN_NULL

__DARWIN_NULL 到 _types.h 我们有

#define __DARWIN_NULL ((void *)0)

NULL 开始,我们将到达 stddef.h

#define NULL ((void*)0)

所以nilNULL是一回事。按照惯例,nil用于对象,NULL用于其他指针类型。

完成处理程序将 block 作为参数,并且 a block is an Objective-C object 因此按照惯例,当不需要完成块时应使用 nil