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 的区别,及其在不同版本中的表现
基本数据类型不同版本中的细微区别

你可能感兴趣的:(Boolean BOOL bool带来的坑)