Xcode 编译器没有将我的变量(和指针)初始值设置为 0 或 nil

发布于 2024-09-28 04:17:24 字数 259 浏览 2 评论 0原文

这非常烦人,因为现在我的值存储起来就好像它们默认包含某些内容一样(就像在 C 中一样)。我所有的面向对象的东西现在都被破坏了,因为我的代表总是有东西。我想知道为什么 Xcode 对我这样做,因为默认情况下 Xcode 总是将变量值设置为 0 或 nil。

所以如果我这样做 NSArray* anArray; 进而 NSLog(%@"%@", anArray);

它可能会崩溃或记录最后分配的内存。这非常令人沮丧。

this is very annoying, since now my values are stored as if they contain something by default (like in C). All my OO stuff are now broken since my delegate are always something. I was wonderin why Xcode do this to me, since by default Xcode always set the variable value to 0 or nil.

So if I do
NSArray* anArray;
and then
NSLog(%@"%@", anArray);

It could crash or log hasard last allocated memory. This is very frustrating.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

南巷近海 2024-10-05 04:17:24

C、Objective C 和 C++ 都将全局变量初始化为零/null/Nil。局部变量不会自动初始化,必须显式初始化。

此外,指向 NSArray 的指针不是 NSArray。在使用该指针之前,您应该将 NSArray 安排在其末尾。例如,制作一个新的,更像是

    // NSArray* anArray = new NSArray;  // if using a C++ backend
    NSArray* anArray = [[NSArray alloc] init];  // if using an Objective-C backend
    // ...
    NSLog(%@"%@", anArray);

C, Objective C, and C++ all initialize global variables to zero/null/Nil. Local variables are not automatically initialized and must be explicitly initialized.

Additionally, a pointer to a NSArray is not an NSArray. Before using that pointer, you should arrange for an NSArray to actually be at the end of it. For instance, make a new one, something more like

    // NSArray* anArray = new NSArray;  // if using a C++ backend
    NSArray* anArray = [[NSArray alloc] init];  // if using an Objective-C backend
    // ...
    NSLog(%@"%@", anArray);
你不是我要的菜∠ 2024-10-05 04:17:24

在这方面,Objective C 的行为与 C 非常相似,即默认情况下不初始化非全局变量。防御性地编写代码,并始终显式初始化指针变量(NULL 或有效地址)。

Objective C behaves much the same as C in this regard, i.e. non-global variables are not initialised by default. Code defensively and always initialise pointer variables explicitly (either to NULL or to a valid address).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文