最近在项目中遇到一个现象很奇葩的问题,进入某个页面一直卡在那里了,第一反应是不是什么骚操作导致了主线程的阻塞。没办法这种问题真是只有一步步的调试了。在最后的最后奋斗下,找到了原因。
阐述下问题的原因,我的某个页面数据源是一个array包装的,由于某个页面的布局是一行有2个,所以我计算某个页面的其中一个模块视图的时候采用了如下的算法
这是伪代码喔
NSUInteger row = (array.count + 1) / 2 - 1;
写这个方法的时候考虑到array.count == 0 的时候为-1, array.count > 0的时候计算正确,自认为考虑的比较周全了。但是,"知道真相的我,眼泪掉下来"。请看下图
图1count1是最大值,count2为-1,大家知道是什么原因了吧!array的count属性是NSUInteger类型(无符号整型)
无符号整型没有负数,当赋值为负数的时候,就会出现问题
图2当给一个NSUInteger类型的值赋值为-1的时候就是给了一个整型最大值(MAX),可以从图中看出规律负数的数值是从最大值倒叙赋值的。
当数据源count为0,我的方法计算出来的为一个最大高度,系统一直在给这个视图进行计算,渲染主线程"小哥哥"一直都很忙,没时间搞其他事情了。所以就卡在那里了!
网友评论