OC定义变量不初始化在Debug与Release模式下的差异
2017-07-12 本文已影响0人
isletn
遇到一个有趣的问题: 一个局部的CGFloat变量在不初始化的情况下,分别在Debug、Release模式使用时出现了一些差异,这里记录下来。
用下面的代码做个简单的测试
CGFloat height;
NSLog(@"height = %f",height);
height = height + 50;
NSLog(@"height = %f",height);
Debug模式下的打印:
image.pngRelease模式下的打印:
image.png我们再断点看一下这个height变量在使用前的值,由于Release模式无法捕获变量的值,所以只能看到Debug模式下的结果:
image.png可以看到,当定义一个CGFloat变量时, 若不赋初始值它的默认值是一个无限接近于0的数(8.0631513401291436E-321 == 80.631513401291436*10^-321)
虽然第一次调用他们时,两个模式下的值都为0,但第二次调用时似乎发生了变化。
height = height + 50;
这行代码在Debug与Release模式下得到的结果并不一样,且呈现倍数关系。
目前的水平还不能解释这一现象,先记录在这吧。
解决办法,定义变量时给它赋一个初始值:
CGFloat height = 0;
NSLog(@"height = %f",height);
height = height + 50;
NSLog(@"height = %f",height);