gpt4 book ai didi

objective-c - 声明时指针总是设置为 nil 吗?

转载 作者:太空狗 更新时间:2023-10-30 03:19:45 26 4
gpt4 key购买 nike

我发现很多人/文章(例如 this SO answer)暗示 Objective-C 中的指针值在您为其赋值之前不会定义。然而,我在实践中发现它们甚至在我调用 alloc 之前就自动设置为 nil - 以下代码在没有断言的情况下为我运行:

NSString* foo;          // 1
assert(foo==nil); // foo is nil
foo = [NSString alloc]; // 2
assert(foo!=nil); // after alloc, not nil.
foo = [foo init]; // 3
assert(foo!=nil); // still not nil

我可以/应该依赖这个吗?它是有保证的还是我只是碰巧以某种 Debug模式运行我的编译器(Xcode)? (我是 Objective-C 的新手)。

一个推论问题:描述标记为 1、2 和 3 的行末尾状态中的 foo 的正确术语是什么?我想至少 1 和 2 中的一个被称为“未初始化”,而 2 和 3 中的一个被“初始化”,但是我们称之为第三个选项的是什么?

最佳答案

ARC ,所有 object 指针在初始化时都设置为 nil。当不在 ARC 下运行时,或者当使用指向其他数据类型的指针时,未初始化的指针将具有垃圾值(实际上,根据 C 标准,从指针读取会产生未定义的行为)。


@Chuck 指出了一些重要的事情,那就是这只适用于局部变量。任何具有静态存储(函数静态或全局)的变量和实例变量总是被初始化为它们各自的零值(对于指针,它是 nil/NULL)。

关于objective-c - 声明时指针总是设置为 nil 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9071990/

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