【发布时间】:2012-12-16 00:29:36
【问题描述】:
我试过了,我已经成功地将一个块分配到 id 变量中。块是 obj-c 对象吗?为什么我们使用 NULL 而不是 nil? (如果是对象)
【问题讨论】:
标签: objective-c object block
我试过了,我已经成功地将一个块分配到 id 变量中。块是 obj-c 对象吗?为什么我们使用 NULL 而不是 nil? (如果是对象)
【问题讨论】:
标签: objective-c object block
块可以用作Objective-C上下文中的对象(也就是说,用GCC或LLVM编译的纯C或C++程序也可以使用块,但它们不能用作对象,因为这两种语言都不理解Objective-C 以一种有意义的方式。)
一般情况下,您应该使用nil 表示对象,Nil 表示Classes,NULL 表示其他指针。我不知道你看到谁使用 NULL 而不是 nil 块,但这不是我在 Objective-C 上下文中要做的(和以前一样,在 C 或 C++ 上下文中,nil如果不引入 Objective-C 运行时标头,Nil 将不可用,因此我将使用NULL。)
【讨论】:
nil。
NULL(尽管它会将它们用于非对象空值。)
NULL 和nil 的语言约定。
C 块的一个很好的特性是它们可以像基本的 Obj-C 对象一样工作。你可以向id投一个块;您可以发送块 Obj-C 消息,例如“复制”、“保留”、“释放”、“自动释放”;您可以将块填充到 NSArray 或 NSDictionary 中。但是当需要执行该块时,您必须将其转换回原来的类型。
NULL、nil、Nil 和 0 只是表示零的不同词。选择其中一个只是为您的程序员同事提供的文档;它对编译器有影响。
按照惯例,NULL 代表一个空的 C 指针,nil 代表一个空的 Obj-C 对象。由于块是这两样东西,你的程序员同事不会嘲笑你选择 NULL 或 nil 来表示一个空块。你的编译器当然不会在意。
【讨论】: