摘要
当前应用版本号字符串curVer,最新的版本号latestVer,当latestVer版本号大于当前安装的,即提示更新;这个比较方法很简单呀,为什么记录呢,因为再网上搜索的时候发现有很多都是用了错误的比较方法,这里指出错误的原因以及给出最恰当的方式;
错误一
直接使用字符串floatValue/doubleValue内置方法,会出现如下问题
比如[@"1.2.4" floatValue] 与[@"1.2.5" floatValue]是相等的,都是1.20000005
[@"1.2.4" doubleValue] 与 [@"1.2.5" doubleValue]是相等的,都是1.2
错误二
直接使用字符串比较方法,有问题
比如[@"1.2.4" compare @"1.13.4"] == 1, 实际上面后面1.13.4应该是要比前面的大的;
正确方式
将两个版本号字符串都用@"."分割成两个数组,然后挨个比较,当某一项前者大于后者则跳出循环,标记成不用更新,小于也跳出循环标记要更新,相等则继续比较;(注意长度不想等的时候的判断)
最恰当的方法,其实就是上面方法的系统实现
直接使用系统带正则的比较表达式
[curVer compare latestVer options:NSNumericSearch] == NSOrderedDescending
则表示要更新;
网友评论