对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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Objective-C打印调试信息
下一篇:cast of NSInteger (aka int) to id is disallowed withARC

发表评论

最新留言

不错!
[***.144.177.141]2024年04月28日 07时35分38秒