0

我试过了,我已经成功地将一个块分配到 id 变量中。块是 obj-c 对象吗?为什么我们使用 NULL 而不是 nil?(如果是对象)

4

2 回答 2

2

C 块的一个很好的特性是它们可以像基本的 Obj-C 对象一样工作。您可以将块投射到id; 您可以发送块 Obj-C 消息,例如“复制”、“保留”、“释放”、“自动释放”;您可以将块填充到 NSArray 或 NSDictionary 中。但是当需要执行该块时,您必须将其转换回其原始类型。

NULL、nil、Nil 和 0 只是表示零的不同词。选择其中一个仅仅是为您的程序员同事提供的文档;它对编译器有影响。

按照约定,NULL表示一个空的 C 指针,并nil表示一个空的 Obj-C 对象。由于块是这两种东西,你的程序员同事不会嘲笑你选择 NULL 或 nil 来表示一个空块。你的编译器当然不会在意。

于 2012-12-16T03:20:38.200 回答
2

块可以在 Objective-C 上下文中用作对象(也就是说,用 GCC 或 LLVM 编译的纯 C 或 C++ 程序也可以使用块,但它们不能用作对象,因为这两种语言都不理解 Objective-C以一种有意义的方式。)

通常,您应该使用nilfor objects、Nilfor Classes 和NULLfor other pointers。我不知道你看到谁使用NULL而不是nilfor 块,但这不是我在 Objective-C 上下文中所做的(和以前一样,在 C 或 C++ 上下文中,nil并且Nil如果不引入 Objective- 则不可用 - C 运行时标头,所以我将使用NULL.)

于 2012-12-16T00:33:24.350 回答