重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1、线程的不安全是由于多线程访问和修改共享资源而引起的不可预测的结果。 ios多线程开发中为保证线程的安全常用到的几种锁: NSLock 、 dispatch_semaphore 、 NSCondition 、 NSRecursiveLock 、 @synchronized 。
创新互联建站专注于企业网络营销推广、网站重做改版、囊谦网站定制设计、自适应品牌网站建设、H5建站、商城网站建设、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为囊谦等各大城市提供网站开发制作服务。
2、自旋锁:线程一直是running(加锁——解锁),死循环(忙等 do-while)检测锁的标志位,机制不复杂。
3、isExecuting 判断线程是否正在执行, isFinished 判断线程是否已经结束, isCancelled 判断线程是否撤销。这个是线程的入口函数。
1、滥用单例的为什么会死锁。 如果在dispatch_once函数的block块执行期间,循环进入自己的dispatch_once函数,会造成链表一直增长,同样也会造成死锁。
2、 iOS中常用的定时器有三种,分别是NSTime,CADisplayLink和GCD。其本质都是通过RunLoop来实现,但GCD通过其调度机制大大提高了性能。
3、= [response.body objectForKey:@body];}];问题4 检查网络状态和API异常 这两个问题一定要分清楚,网络状态不佳的时候应该提示用户“网络不给力”,如果是API异常应该提示出“服务器错误,请您稍后刷新试试。”。
4、dispatch_once(&onceToken, ^{ VC = [[self alloc] init];});return VC;} 不建议将控制器设置成单例,一般单例多继承于NSobject , 控制器写成单例是一件很危险的事情。
5、如果内存管理不当,会出现内存泄漏或溢出等问题,导致程序崩溃或造成其他不良后果。在iOS开发中,内存管理是一个特别重要的问题,因为iOS设备的内存资源相对较小,更容易出现内存不足的情况。
自旋锁:线程一直是running(加锁——解锁),死循环(忙等 do-while)检测锁的标志位,机制不复杂。
线程的不安全是由于多线程访问和修改共享资源而引起的不可预测的结果。 ios多线程开发中为保证线程的安全常用到的几种锁: NSLock 、 dispatch_semaphore 、 NSCondition 、 NSRecursiveLock 、 @synchronized 。
NSLock -- 互斥锁 NSCondition -- 互斥锁 生产 -- 消费 与NSLock同样遵守NSLocking的协议,有同样的lock、unlock的api。NSConditionLock -- 互斥锁 是基于NSCondition进一步封装,自带条件。
NSConditionLock 用于需要根据一定条件满足后进行 加锁/解锁.首先看下API 下面就看一下适用场景 此锁可以在同一线程中多次被使用,但要保证加锁与解锁使用平衡,多用于递归函数,防止死锁。
所以就可以分成:串行队列同步执行、串行队列异步执行、并行队列同步执行、并行队列异步执行。GCD实现原理:GCD有一个底层线程池,这个池中存放的是一个个的线程。
分析: 这个案例没有使用系统提供的串行或并行队列,而是自己通过 dispatch_queue_create 函数创建了一个 DISPATCH_QUEUE_SERIAL 的串行队列。执行任务1;遇到异步线程,将【任务同步线程、任务4】加入串行队列中。
用main queue也是一样的效果,因为main queue也是一个串行队列。串行队列实际上是单线程。第二幅图中使用的并行队列,当block加到并行队列中,不会等待正在执行中的处理,而立即分发到可用线程中去执行。
造成主队列的相互等待,并非主线程死锁。死锁,崩溃。原因与在主线程同步提交主队列原因相同。由于串行队列的相互等待造成死锁。队列改成并发,可以正常执行。上层业务异步获取结果再调同步也会死锁。
不会为setter方法加锁,适合内存小的移动设备;atomic:原子性,默认为setter方法加锁(默认就是atomic),线程安全。