开发的过程中,为了防止输出的数为负数,我们使用NSUinteger进行限制。但
数字在内存里存储的都是以补码形式存储的! 正数的补码就是本身,负数的补码是其绝对值取反再加1.
如:-1 的在内存中,以8位为例,内存就是111111111,因此再对无符号整数处理的时候,如果为负数,取的话会得到一个非期望的值。
常见的场景:
NSInteger index = [self.imageModels indexOfObject:model];
如果获取不了index,返回NSNotFound(即9223372036854775807)。如果那这个数进行循环操作,或者返回表格的高度等操作,会卡死主线程。推荐做法是对返回的index进行NSNotFound判断。
[_collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]]
对应NSUInteger基本运算,如果负数,获取
NSUInteger 加减 慎用,为负就会无穷大,导致程序异常。
18 446 744 073 703 330 816
NOTE:
dispatch_worker_thread3对应主线程,程序会挂起。
Instruments使用