Objective-C对象&块

时间:2012-12-16 00:29:36

标签: objective-c object block

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

2 个答案:

答案 0 :(得分:2)

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

通常,您应该使用nil表示对象,Nil表示Class es,NULL表示其他指针。我不知道你看到谁使用NULL而不是nil来获取块,但这不是我在Objective-C上下文中所做的事情(如前所述,在C或C ++上下文中)如果没有引入Objective-C运行时标头,则nilNil不可用,因此我将使用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来表示空块。你的编译器肯定不在乎。