Boolean BOOL bool带来的坑

问题描述:

ui层的现象就不说了,我的app里说了你也看不到。debug找原因,最终定位到👇一段代码上,在 ios 7、8版本的手机上,if (!destinationAvailable) 的判断失效

// 确保不重复添加
__block BOOL destinationAvailable = NO;
[self.destinationArray enumerateObjectsUsingBlock:^(Region * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
    if (obj.code == region.code) {
        //TODO 提示用户该线路已添加? 还是直接替换原来线路
        destinationAvailable = YES;
        *stop = YES;
    }
}];

if (!destinationAvailable) {
    [self.destinationArray addObject:region];
}

解决:

__block Boolean destinationAvailable; 改为 __block BOOL destinationAvailable = NO;

分析:

下班回去在看,上班还要码代码呢😢
不过大致可以猜到,在低版本系统中Boolean的初始值不是NO,也不是nil,具体的回去好好研究。猜测和int 在不同系统中位数不同类似。

关联

bool 、BOOL、Boolean 的区别,及其在不同版本中的表现
基本数据类型不同版本中的细微区别

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 5,295评论 1 23
  • 禅与 Objective-C 编程艺术 (Zen and the Art of the Objective-C C...
    GrayLand阅读 1,661评论 1 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,067评论 19 139
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,221评论 30 472
  • 基础 1. 为什么说Objective-C是一门动态的语言? 2. 讲一下MVC和MVVM,MVP? 3. 为...
    波妞和酱豆子阅读 3,373评论 0 46