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

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 24,194评论 8 238
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 121,141评论 16 134
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 9,006评论 1 27
  • 我认真的谈了两个女朋友,认真的说了两次我爱你。 很多时候,我更喜欢说:我喜欢你。对我的女朋友也一样,我没有走来便说...
    萧乙阅读 89评论 0 0
  • 今天我要分享的内容是关于切图命名规则和标注规范,从工作到现在开发过的项目大大小小也有十几二十个了,但每次的设计师可...
    晨风说产品阅读 11,705评论 7 146