提问人:mdb29 提问时间:2/14/2018 最后编辑:mdb29 更新时间:2/14/2018 访问量:501
调用一个函数,该函数采用我不打算使用的完成处理程序,我是使用 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 用于指针。我问了更多关于我使用哪一个作为完成处理程序的信息。
答:
0赞
Smartcat
2/14/2018
#1
Apple 至少在他们的一些 Objective-C 文档中使用了 NULL。下面是一个示例。
有关 Objective-C 中 nil 与 NULL 的一般讨论,请参阅此 SO。
我刚刚在 Obj-C 中使用了 NULL 来匹配 Apple 的文档。在 Swift 中,使用 nil。
0赞
user3386109
2/14/2018
#2
Xcode 有一个“跳转到定义”功能,可用于回答这个问题。
从 开始,我们进入 MacTypes.hnil
#define nil __DARWIN_NULL
继 _types.h 之后,我们有__DARWIN_NULL
#define __DARWIN_NULL ((void *)0)
然后从开始将我们带到 stddef.hNULL
#define NULL ((void*)0)
所以和是一回事。按照约定,用于对象,并用于其他指针类型。nil
NULL
nil
NULL
完成处理程序将 a 作为参数,而块是 Objective-C 对象,因此按照惯例,当不需要完成块时,应使用。
block
nil
评论
0赞
mdb29
2/14/2018
所以我想我的下一个问题是在这种情况下,完成处理程序(块)是指针吗?我意识到这只是惯例,不会影响发生的事情。
0赞
user3386109
2/14/2018
@mdb29我修复了答案以更好地匹配更新的问题。
评论
nil
Nil
NULL
NSError **
nil