NSUInteger造成的Bug

前两天接到测试同学的反映一个一级bug:点击了某个按钮之后,整个APP卡死,点击任何按钮都没反应,第一反应就是主线程有耗时操作,导致主线程被阻塞,不响应事件,紧接着一步一步排查代码,结果发现完全不是耗时操作阻塞主线程的锅,万恶之源是这个:

NSInteger row = ((self.hotArray.count - 1) / 3) + 1;
self.selectTriperView.slwy_height = (row * 30 + row * 5 + 5) + 25;  
[self.selectTriperView refreshView:(row * 30 + row * 5 + 5) selectArray:self.hotArray fromType:2];

这里是通过接口获取一个数组,把数组值展示在collectionView之上,由于数组数量是动态的,所以需要根据具体具体个数计算出整个collectionView的高度。好了,问题就在这个self.hotArray.count - 1,当这个数组为空的时候,取出来的count和预期中的0大相径庭,结果是:18446744073709551615 ,(它等于2的64次方减一,也就是64位系统的能表示的最大数减一), .count是调用了方法:
- (NSUInteger)count;
它获取数组元素数量,但是它的返回值是NSUInteger,当一个无符号数0减一时,结果就是无法预期的,这里由于计算出的数值大于了NSInteger能表示的最大值导致卡死。
参见:BugByNSUInteger.
最后,在此提醒广大同仁,使用.count时注意对空数组的处理!!!!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 30,045评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,907评论 1 32
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,542评论 11 349
  • 温小兮,如果可以回到小时候,你最想回到哪段时光? 林断山明竹隐墙,乱蝉衰草小池塘。翻空白鸟时时见,照水红蕖细细香。...
    流浪的小红豆阅读 3,777评论 3 5

友情链接更多精彩内容