Objective-C内存细节

Ale*_*der 1 debugging xcode memory-management objective-c

在我的objective-c程序中(或者,也许在调试实用程序中),我得到了一个奇怪的行为.
我定义了,但没有分配或初始化一些类的4个实例(让它成为"矩形"):
Rectangle *left, *right, *bottom, *upper;

在这一行之后,我希望我的所有四个对象都是空指针(在Xcode中调试),但是对于其中一个(具体地说是"upper")存在指向一些内存位置,并且他的属性用随机值初始化.
这是正常的行为吗?如果是这样,请解释我原因.(我对Objective-c编程有点新意)

Lou*_*arg 5

Objective C(通常)不保证堆栈值为零.它确保对象中的所有ivars都归零.此外,在ARC下,它确实是零堆栈变量,它知道它们是对象.因此,假设您没有使用ARC,您所看到的行为是正确的.

通常,即使您处于将值归零的环境中,也应该明确将其归零,以防您的代码在其他地方重用.如果您的代码需要工作的约束,您应该满足它,在运行时测试它,或者在编译时测试它(assert()).

至于为什么会出现这种情况,就是这样,因为C表现得那样,而C传统上已经做到了,因为它是裸金属,并且更喜欢让编译器有很多自由来进行性能优化.Objective C仅在需要的地方有所不同,以支持其自身(补充)功能.