我尝试过,我已经成功地将一个块分配给了id变量。一个块是一个obj-c对象?为什么我们使用NULL而不是nil? (如果是对象)
答案 0 :(得分:2)
一个块可以用作Objective-C上下文中的一个对象(也就是说,用GCC或LLVM编译的纯C或C ++程序也可以使用块,但它们不能用作对象,因为两种语言都不能理解Objective-C以有意义的方式。)
通常,您应该使用nil
表示对象,Nil
表示Class
es,NULL
表示其他指针。我不知道你看到谁使用NULL
而不是nil
来获取块,但这不是我在Objective-C上下文中所做的事情(如前所述,在C或C ++上下文中)如果没有引入Objective-C运行时标头,则nil
和Nil
不可用,因此我将使用NULL
。)
答案 1 :(得分:2)
C块的一个很好的特性是它们可以表现得像基本的Obj-C对象。您可以将块转换为id
;你可以发送一个块Obj-C消息,如'copy','retain','release','autorelease';你可以将一个块填充到NSArray或NSDictionary中。但是当需要执行块时,必须将其强制转换为原始类型。
NULL,nil,Nil和0只是零的不同单词。选择一个而不仅仅是你的程序员的文档;它使编译器与众不同。
按照惯例,NULL
表示空C指针,nil
表示空Obj-C对象。由于块都是这些东西,你的同事程序员不会嘲笑你选择NULL或nil来表示空块。你的编译器肯定不在乎。