最近练习使用NSoperation模拟SDWebImage下载图片,发生了崩溃的问题,还专门写博客记录这件事情: http://www.cnblogs.com/tufei7/p/7074030.html, 当时以为是因为weakSelf和StrongSelf造成的崩溃, 然而我尽管用了StrongSelf和WeakSelf仍然崩溃,当时我也很崩溃.

思前想后还是跟demo源码对比下吧,对比发现:

demo代码 红框里面的代码是写在 mainQueue的block里面的, 我的是写在mainQueue上面也就是子线程中的.

我蒙圈了,为啥呢? 我去请教大神,大神说:"因为你对字典进行插入(也叫写)操作,如果是多线程并发执行,可能会发生资源抢夺,资源抢夺会造成崩溃.对字典进行读操作不会造成资源抢夺"

名词解释:资源抢夺 , 我的理解是多条线程操作同一个可变对象(这里是字典),

名词解释:死锁 资源抢夺貌似跟死锁没关系

问: 解决资源抢夺有哪些方式?

答: a): 推荐的写法 @synchronized代码块

  1. @synchronized(self)
  2. {
  3. //关键代码;
  4. }

  b): NSLock同步锁. lock unLock

  c): 使用dispatch信号量

最简单的写法是 @synchronized, 我这样写也是可以的: 在子线程对字典进行写操作,但是加锁

下面的博客写的特别仔细

iOS多线程开发资源抢夺和线程间的通讯问题

http://www.cnblogs.com/huanying2000/p/6138573.html

死锁:

http://www.cnblogs.com/tufei7/p/6044384.html

dispatch_sync(dispatch_get_main_queue(), ^{

    });

在sync同步,阻塞主线程,会等待block执行完毕才返回,  当queue是串行队列,会造成死锁, 因为block要放在队列的队尾执行, block要最后执行, sync

GCD中死锁的三种方式

http://www.jianshu.com/p/f1c6e1eba5bd

多线程下载图片,滑动tableView崩溃--资源抢夺问题的更多相关文章

  1. django 多线程下载图片

    example1: from multiprocessing.dummy import Pool as ThreadPool #多线程 import time import urllib2 urls ...

  2. android 多线程下载图片

    很多时候我们需要在Android设备上下载远程服务器上的图片进行显示,今天Android123整理出两种比较好的方法来实现远程图片的下载.   方法一.直接通过Android提供的Http类访问远程服 ...

  3. 多线程下载图片,同步下载http://www.importnew.com/15731.html

    package mutiDownload; import java.io.IOException; import java.io.InputStream; import java.io.RandomA ...

  4. SDWebImage 在多线程下载图片时防止错乱的策略

    在我们使用sd的时候,对tableView  上cell得图片进行异步下载的时候会遇到这样一个问题: 由于cell的重用机制,在我们加载出一个cell的时候imageView数据源开启一个下载任务并返 ...

  5. iOS多线程开发资源抢夺和线程间的通讯问题

    说到多线程就不得不提多线程中的锁机制,多线程操作过程中往往多个线程是并发执行的,同一个资源可能被多个线程同时访问,造成资源抢夺,这个过程中如果没有锁机制往往会造成重大问题.举例来说,每年春节都是一票难 ...

  6. curl多线程下载类

    <?php /** * curl多线程下载类 */class MultiHttpRequest{ public $urls = array (); private $res = array () ...

  7. tableView异步下载图片/SDWebImage图片缓存原理

    问题说明:假设tableView的每个cell上的imageView的image都是从网络上获取的数据.如何解决图片延迟加载(显示很慢).程序卡顿.图片错误显示.图片跳动的问题. 需要解决的问题: 1 ...

  8. iOS多线程自定义operation加载图片 不重复下载图片

    摘要:1:ios通过抽象类NSOperation封装了gcd,让ios的多线程变得更为简单易用:   2:耗时的操作交给子线程来完成,主线程负责ui的处理,提示用户的体验   2:自定义operati ...

  9. 打造百度网盘备份利器:自动备份Linux VPS文件和多线程下载百度网盘资源

    前一段时间国内的各大网盘百度云盘,金山快盘,360云盘,华为网盘为争夺用户上演空间容量博弈,网盘商们还固执地以为中国的网民都不懂网络技术,可以像某公司那样用一些数字的手段来忽悠用户,参与到网盘商的数字 ...

随机推荐

  1. iOS private-api-checker私有API检测

    转自: http://www.jianshu.com/p/07779e293ca7 注:  '根目录' 指的是 private-api-checker 包的目录 iOS-private-api-che ...

  2. Wex5短信验证

    调了好几天短信验证测试,终于成功,现将全部源代码发给大家,希望对各位有所帮助,少走弯路        Model.prototype.saveUserBtnClick = function(event ...

  3. DWORD类型

    INT 代表int,DWORD 代表 unsigned longint会随着机器位数的不同而发生变化,比如在16位机上为16为,在32位机上为32位,在64位机上为64位.看看最原始的定义就知道了. ...

  4. php 用命令行导出和导入MySQL数据库

    命令行导出数据库:1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录如我输入的命令行:cd C:\Program Files\MySQL\MySQL Server 4.1\ ...

  5. unity 打包apk安装失败

    Unity 打包Apk安装失败,错误提示:安卓未完成. 解决方案:检查BundleID是否一致

  6. BZOJ 1089 SCOI2003 严格n元树 动态规划+高精度

    题目大意:定义一棵深度为d的严格n元树为根的深度为0,最深的节点深度为d,且每一个非叶节点都有恰好n个子节点的树 给定n和d,求深度为d的严格n元树一共同拥有多少种 此题的递推部分并不难 首先我们设深 ...

  7. python计算时间差的方法

    本文实例讲述了python计算时间差的方法.分享给大家供大家参考.具体分析如下: 1.问题: 给定你两个日期,如何计算这两个日期之间间隔几天,几个星期,几个月,几年? 2.解决方法: 标准模块date ...

  8. Python 入门(八)切片

    对list进行切片 取一个list的部分元素是非常常见的操作.比如,一个list如下: >>> L = ['Adam', 'Lisa', 'Bart', 'Paul'] 取前3个元素 ...

  9. thinkphp5.0开发规范

    命名规范 ThinkPHP5遵循PSR-2命名规范和PSR-4自动加载规范,并且注意如下规范: 目录和文件 目录不强制规范,驼峰及小写+下划线模式均支持: 类库.函数文件统一以.php为后缀: 类的文 ...

  10. CSS美化自己的完美网页

    CSS美化自己的完美网页   CSS概述 css样式: css是英文Cascading Style Sheets的缩写,称为层叠样式表,用于对页面进行美化,CSS的可以使页面更加的美观.基本上所有的h ...