【问题标题】:Why do we need many types of "null" in objective-C? [duplicate]为什么我们在 Objective-C 中需要多种类型的“null”? [复制]
【发布时间】:2015-04-01 21:27:14
【问题描述】:

我是 Objective-C 和 SO 的新手,所以请耐心等待 - 我一直在阅读一些关于何时使用 nil、NULL 或 Nil 的问题。

我的问题是:为什么我们需要这么多类型的“null”? Xcode(或类似的 IDE)不能解释这种情况需要什么“null”吗?

为了澄清,我不是在寻找 何时 使用每个 - 这已经清楚地解释了。例如,为什么Objective-C 不能简单地将NULL 定义为nothing,然后只使用上下文来确定您需要哪个nothing。我非常肯定,答案要么出于历史目的,要么出于必要目的(请举个例子),或两者兼而有之。

例如

NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionary];
mutableDictionary[@"someKey"] = NULL;

...在这种情况下,编译器会理解您需要插入一个“空”对象,并且只需在幕后添加它,这样字典就会直观地表现(不仅仅是导致错误)。

【问题讨论】:

  • 在 Objective C 中,nil is NULL is(一种形式)0 ..
  • stackoverflow.com/questions/557582/null-vs-nil-in-objective-c 中的答案解释了何时使用 - 从合同/语义的角度 - 不同的形式和这些选择背后的基本原理。
  • 这是出于歇斯底里的原因。
  • 附注:可以将消息发送到 nil 而不会导致程序崩溃,但是发送到 NULL 的任何消息都会导致程序崩溃。
  • @ZaneHelton,在语义上它们并不相同,但它们的价值相同,并且可以互换使用。向NULL 发送消息不会导致崩溃,因为nil (id)NULL。查看你的 objc.h,然后是 types.h

标签: objective-c xcode null


【解决方案1】:

有一个NSHipster Article 涵盖了不同类型的null

基本上,NULL 是 C 指针的空值,
nil 是 Objective-C 对象的空值,
Nil 是 Objective-C 类的空值,
[NSNull null] 是一个Objective-C-Object来表示null。

【讨论】:

    猜你喜欢
    • 2021-02-15
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 2020-09-26
    • 1970-01-01
    • 2011-02-06
    相关资源
    最近更新 更多