美文网首页
NSUInteger导致程序死锁

NSUInteger导致程序死锁

作者: 似奔跑的野马 | 来源:发表于2018-04-29 00:08 被阅读0次

开发的过程中,为了防止输出的数为负数,我们使用NSUinteger进行限制。但

数字在内存里存储的都是以补码形式存储的! 正数的补码就是本身,负数的补码是其绝对值取反再加1.
如:-1 的在内存中,以8位为例,内存就是111111111,因此再对无符号整数处理的时候,如果为负数,取的话会得到一个非期望的值。
常见的场景:

NSInteger index = [self.imageModels indexOfObject:model];

如果获取不了index,返回NSNotFound(即9223372036854775807)。如果那这个数进行循环操作,或者返回表格的高度等操作,会卡死主线程。推荐做法是对返回的index进行NSNotFound判断。


[_collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]]
线程卡死调用栈.png

对应NSUInteger基本运算,如果负数,获取

NSUInteger   加减 慎用,为负就会无穷大,导致程序异常。
18 446 744 073 703 330 816

NOTE:
dispatch_worker_thread3对应主线程,程序会挂起。
Instruments使用

相关文章

  • NSUInteger导致程序死锁

    开发的过程中,为了防止输出的数为负数,我们使用NSUinteger进行限制。但 数字在内存里存储的都是以补码形式存...

  • 面试官:连多线程问题你都一问三不知,还要我怎么“放水”?

    面试官:问你几个多线程相关的问题吧,说一下导致线程死锁的原因,怎么解除线程死锁? 程序员阿里:这个...死锁......

  • Java程序中的死锁

    什么是死锁? 死锁是一种特定的程序状态,主要是由于循环依赖导致彼此一直处于等待中,而使得程序陷入僵局,相当尴尬。死...

  • 多线程二

    一、死锁 最容易导致死锁的一个情况信号锁 + 互斥锁 ,没处理好,导致死锁,NSConditionLock 解决死...

  • 29、怎样尽量避免死锁的出现?

    怎样尽量避免死锁的出现? 1. 设置获取锁的超时时间,至少能保证最差情况下,可以退出程序,不至于一直等待导致死锁;...

  • 十八 死锁及定位

    死锁是一种特定的程序状态,在实体之间,由于循环依赖导致彼此一直处于等待之中,没有任何个体可以继续前进 定位死锁最常...

  • 第十九章、JAVA死锁分析

    什么是死锁? 死锁是一种特定的程序状态,在实体之间,由于循环依赖导致彼此一直处于等待之中,没有任何个体可以继续前进...

  • Golang高并发工作池

    go程序开发过程中,通过简单的调用go func 函数来开启协程,容易导致程序死锁,并且会无限制的开启grouti...

  • 一次读锁重入导致的死锁故障

    在两天前第一次遇到自己的程序出现死锁, 我一直非常的小心使用锁,了解死锁导致的各种可能性,这次的经历让我未来会更加...

  • 并发 :线程间同步、锁、可重入锁及互斥锁

    线程间同步 线程间同步涉及线程互斥锁; 锁(Lock)容易导致死锁,可重入锁(RLock)则不会导致死锁,但每次 ...

网友评论

      本文标题:NSUInteger导致程序死锁

      本文链接:https://www.haomeiwen.com/subject/duanlftx.html