我与array.count的"爱恨情仇"

2019-05-25  本文已影响0人  Michale_Zuo

 最近在项目中遇到一个现象很奇葩的问题,进入某个页面一直卡在那里了,第一反应是不是什么骚操作导致了主线程的阻塞。没办法这种问题真是只有一步步的调试了。在最后的最后奋斗下,找到了原因。
 阐述下问题的原因,我的某个页面数据源是一个array包装的,由于某个页面的布局是一行有2个,所以我计算某个页面的其中一个模块视图的时候采用了如下的算法

这是伪代码喔
NSUInteger row = (array.count + 1) / 2 - 1;

 写这个方法的时候考虑到array.count == 0 的时候为-1, array.count > 0的时候计算正确,自认为考虑的比较周全了。但是,"知道真相的我,眼泪掉下来"。请看下图

图1

 count1是最大值,count2为-1,大家知道是什么原因了吧!array的count属性是NSUInteger类型(无符号整型)

 无符号整型没有负数,当赋值为负数的时候,就会出现问题

图2

当给一个NSUInteger类型的值赋值为-1的时候就是给了一个整型最大值(MAX),可以从图中看出规律负数的数值是从最大值倒叙赋值的。

 当数据源count为0,我的方法计算出来的为一个最大高度,系统一直在给这个视图进行计算,渲染主线程"小哥哥"一直都很忙,没时间搞其他事情了。所以就卡在那里了!

上一篇 下一篇

猜你喜欢

热点阅读