对OC中BOOL值在debug和release模式下不同的问题分析和总结
发布日期:2021-06-29 11:52:51
浏览次数:3
分类:技术文章
本文共 658 字,大约阅读时间需要 2 分钟。
背景:
- (NSData *)getData{ BOOL isReaded; while (!isReaded) { NSLog(@"balalala"); } }
在Debug模式下运行程序一切正常,将Edit Scheme中build configuration改为Release模式运行程序,打印不会输出。此处是BOOL变量isReaded出现异常。
分析
当定义一个属性定义,@property (nonatomic) BOOL isReaded;
此时以下代码运行正常。
- (NSData *)getData{ while (!_isReaded) { NSLog(@"balalala"); } }
查阅资料,发现以下方式初始化BOOL值时不会有默认值,它被初始化为垃圾值。
-(void)somemethod { BOOL x; // <--- 没有默认值
但是,对于BOOL ivar,它将被初始化为NO,因为整个实例在初始化时都是0。
注意:在ARC环境下,局部对象指针总被初始化为默认值nil,但是非对象指针类型的局部变量任然会别初始化为垃圾值,如BOOL类型。结论
在定义BOOL类型变量时,赋值为NO
BOOL isReaded = NO;
属性会被自动初始化,但是局部变量不会得到任何值。即便如此,局部变量isReaded不是YES或NO,而是非nil,因此这是不能指望的(随机的)垃圾值,所以建议初始化时指定默认值。
参考
转载地址:https://blog.csdn.net/zzl819954692/article/details/81082022 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月28日 07时35分38秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
如何掌握“所有”的程序语言?没错,就是所有!
2019-04-29
39岁单身程序员入住养老院
2019-04-29
写论文,这个神器不能少!
2019-04-29
我在哥大读博的五年,万字总结
2019-04-29
本科、硕士、博士,究竟有何区别?
2019-04-29
如果我的实验室也这样布置,那多好。
2019-04-29
现在做硬件工程师还有前途吗?
2019-04-29
用 50 种编程语言写“Hello,World!”
2019-04-29
GD32替换STM32,这些细节一定要知道。
2019-04-29
华为员工离职心声:菊厂15年退休,感恩,让我实现了财务自由!
2019-04-29
春晚上的“拓荒牛”
2019-04-29
嵌入式驱动自学者的亲身感受,有什么建议?
2019-04-29
华为被超越!这家公司成中国最大智能手机制造商,不是小米!
2019-04-29
腾讯机器狗,站起来了!
2019-04-29
我用自己创造的深度学习框架进入腾讯,爽!
2019-04-29
芯片为什么持续缺货?
2019-04-29
又涨了?2021 年 3 月程序员工资统计新出炉
2019-04-29
初入行的C++程序员,如何快速摆脱CRUD阶段?
2019-04-29
研究生跟了一个很棒的导师是种怎样的体验?
2019-04-29
学会扶墙的机器人:没有什么能让我倒下!
2019-04-29