为什么 [[NSNumber alloc] init] return nil?

Why does [[NSNumber alloc] init] return nil?

我知道我应该使用指定的初始化器来init一个NSNumber。但是当我发现: [[NSNumber alloc] init] returns nil,我还是有点意外。 在 NSNumber 到 return nil for init 的实施中做了什么(毕竟,NSObject 将 return self) ?它是否首先在指定的初始化程序中尝试 init 底层 __NSCFNumber ?所以如果你通过默认的 init,它 returns nil 因为底层 __NSCFNumbernil。为什么它不直接将 initnew 声明为 NS_UNAVAILABLE

我怀疑 NSNumber 的覆盖 init 只是 returns nil。这是有效的 if an object cannot be created for some reason.

调用此初始化程序是无效的,因为在不知道您想要哪种数字的情况下无法创建对象。

未标记为 NS_UNAVAILABLE 的原因是该宏仅在 2014 年引入。

NSNumber is much older than that. 20 years older. It dates back to NeXTSTEP 从 1994 年开始(这就是 NS 前缀在所有 类 上的含义)。添加该宏将是一项重大更改。