UICollectionView/UITableView CPU计算暴增

关于使用UICollectionView 的时候
在运行过程当中cpu计算量突然暴增,导致线程卡死,打断点的时候发现
- (CGSize)collectionView: layout: sizeForItemAtIndexPath:
这个方法调用过后进行不到下一步操作了.之后CPU突然的暴增.
出现问题的原因:
我在

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
        NSInteger rows = (self.ary.count - 1) / 5 + 1;
        return CGSizeMake(SCREEN_WIDTH - 40, kBaseScale(85) * rows - kBaseScale(10));
}

这个方法当中有一句话是 NSInteger rows = (self.ary.count - 1) / 5 + 1;
在步进的时候发现当self.ary.count = 0的时候row的数据出现异常,变得非常的大.通过NSLog打印出来的数据没有异常.
通过查看NSArray的API我们发现,NSArray的count属性是NSUInteger.NSUInteger是无符号的,即没有负数,NSInteger是有符号的,所以NSUInteger类型不能给它赋负值。
例如:
NSUInteger a = 0 - 1;a的值实际就是18446744073709551615
所以在上面计算公式中,由于数据类型不同造成数据溢出从而导致计算出现问题,而异常庞大的数据是进一步导致CPU计算量异常庞大.

解决办法如下:

            NSInteger count = self.ary.count;
            NSInteger rows = (count - 1) / 5 + 1;
            return CGSizeMake(SCREEN_WIDTH - 40, kBaseScale(85) * rows - kBaseScale(10));

验证方法如下

NSUInteger a = (0 - 1);
NSLog(@"%lu",(unsigned long)a);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值