3

我刚刚遇到了一个非常奇怪的错误,这可能是由于我对 Objective C 数据类型缺乏了解而发生的。如果我这样做:

CGFloat newY;
NSLog(@"newY is %f", newY);

日志返回0.0,虽然我希望为零,但这不是真正的问题。如果我现在将此应用程序导出到 iOS .ipa 并从那里安装应用程序, newY 会自动初始化为185.000。这个值从哪里来?为什么从 .ipa 安装应用程序而不是直接从 XCode 安装时它会有所不同?

我真的很感激任何关于正在发生的事情的见解,这对我来说没有任何意义。

4

2 回答 2

4

newY 没有初始化为零,它是当时发生在堆栈(存储 newY 的位置)上的任何内容。这在不同平台上可能不同,但也可能在执行之间发生变化。

您很可能会收到一条警告,告诉您在自己初始化之前使用 newY 是不安全的。

于 2013-07-29T09:44:33.417 回答
1

CGFloat 不是指针,所以不能赋值为零。

这是一个自动变量,因此它在内存中占有一席之地,并且它采用已经存储的值,因为您没有对其进行初始化。该值未定义,因此您应该对其进行初始化。

于 2013-07-29T09:44:16.833 回答