【问题标题】:Objective-C objects & blocksObjective-C 对象和块
【发布时间】:2012-12-16 00:29:36
【问题描述】:

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

【问题讨论】:

    标签: objective-c object block


    【解决方案1】:

    块可以用作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, nil, 0 - 在 Objective-C 中都是一样的。
    • @Lluís:与 Objective-C 对象一起工作的优秀示例代码永远不会为它们使用NULL(尽管它会将它们用于非对象空值。)
    • @rmaddy:如上所述,这是区分NULLnil 的语言约定。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      相关资源
      最近更新 更多