iOS 局部变量BOOL未初始化时,出现随机值
最近做开屏广告的一个功能,就是倒计时结束进入主页面,程序在模拟器和真机的时候都能正常进入。但是打包出来,测试,倒计时后无法进入主页面,就卡在最后一秒了!!!
后面查问题,原来打包出来的BOOL值变成随机值了!!!
1.jpeg 2.jpeg因为当时没给BOOL没有初始化赋值,虽然程序在模拟器和真机运行,isComplete = 0,但是打包出来,isComplete的值变成随机值,原来在debug和release环境也是有区别的!
未赋值.jpg这是为什么呢?
如果你声明了一个变量但是没有为它提供一个值,它就被认为是“未初始化的”。C中一个未初始化的变量具有“未定义”值,通常是垃圾,包含最后一次写入该地址时发生的任何事情。严格来说,“未定义”意味着你不应该使用该值。
这个变量是本地的,每次运行该方法时都会被重新创建,因此会得到一个新的实际值,但每次都是未定义值。
在ARC下,本地对象指针总是有一个默认值nil,但是类似BOOL的非对象类型的局部变量仍然被初始化为垃圾,垃圾值就是未确定的值,即出现随机值。
同理比如:int a。
总结:养成好习惯给变量默认值!!!
BOOL isComplete = NO;
参考:
https://stackoverflow.com/questions/10022025/local-variables-set-to-nil-objective-c
https://stackoverflow.com/questions/9726817/can-variables-be-set-randomly-when-declaring-them-again/9726948#9726948
https://stackoverflow.com/questions/1597405/what-happens-to-a-declared-uninitialized-variable-in-c-does-it-have-a-value