gpt4 book ai didi

ios - 为什么 NSNumber *a = 0 不显示错误

转载 作者:行者123 更新时间:2023-12-02 19:29:36 24 4
gpt4 key购买 nike

我知道初始化 NSNumber 的正确方法是 NSNumber *a = @1;

当我声明 NSNumber *a = 1; 时,我会收到错误

Implicit conversion of int to nsnumber is disallowed with arc

但我不知道为什么当我声明 NSNumber *a = 0; 时没有错误

就我而言,我在 NSNumber 类别中编写了一些函数然后

  • 如果NSNumber的值为@0,我可以正常使用category中的函数
  • 如果 NSNumber 的值为0,我可以在类别中使用该函数,不会发生错误,但是当运行应用程序时,该函数永远不会调用

最佳答案

值 0 与 nilNULL 同义,它们是指针的有效值。

与 C 的兼容性导致了这种不一致的行为。

历史

在C语言中,没有特殊的符号来表示未初始化的指针。相反,选择值 0(零)来表示这样的指针。为了使代码更容易理解,引入了一个预处理器宏来表示这个值:NULL。因为它是一个宏,所以 C 编译器本身永远看不到该符号;它只看到 0(零)。

这意味着 0(零)在分配给指针时是一个特殊值。即使它是一个整数,编译器也会接受赋值而不会提示类型转换(无论是隐式转换还是其他转换)。

为了保持与 C 的兼容性,Objective-C 允许将文字 0 分配给任何指针。编译器将其视为与赋值 nil 相同。

关于ios - 为什么 NSNumber *a = 0 不显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39099050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com