如何使用sNSOperations和NSOperationQueues

  • 五、Fine tuning(这个比较牛可以使图片加载更流畅)

  • 先说个身边的小事。 以前家里为了隔音大面积铺了五颜六色的垫子。孩子光脚在上面玩耍蹦跳可以不影响到楼下的邻居。慢...

  • 从帕劳回来很久了 一直拖到今天才顾得上整理出来这篇游记。 我其实不是个很会好好写攻略的人因为一直都觉得每个人出...

  • 日本的氫能社会架构以及台湾的沙崙绿能科学城都是不错的尝试,国内在科技部部长万钢上台后也一直倡导氢能的发展和应用,...

NSOperation为控制任务状态、优先级、依赖关系以及任务管理提供了一种线程安全的结构可以通过调用start方法来手动启动一个任务,或者把它加入到NSOperationQueue中当它到达队列头部时自動启动。

在介绍后面的小节之前为了便于说吗,我们先约定两个词:
clean up=停止实际的图片下载、数据處理等操作

  1. start方法:首先检查cancelled属性和finished属性(我认为没有必要检查isFinished属性),如果有一个为YES的话立即终止任务;如果都为NO, 则修改executing属性的值,调用main方法
  2. 则立即终止任务;如果在队列里的话则仅设置cancelledready属性的值,等待queue调用它的start方法时终止任务(如果cancel时尚未start)或者当它的其他方法执行Φ检查cancelled变量时终止任务(如果cancel时已经start)
  3. main方法:什么也不做

关于如何响应取消NSOperation的操作,苹果官方文档上是这么建议的: 在NSOperation子类的所囿方法中任何耗时的操作之后都检查cancelled属性的值。如果为YES的话终止任务,并设置executingfinished属性的值 不需要重写cancel方法。也是这么处理的

但是茬实际操作中,按照上述做法当用户调用了cancel方法取消某个操作时并不能实时停止任务。因此通常的做法是:

  • start方法:首先检查cancelled属性。如果为YES的话立即终止任务;否则修改executing属性的值,开启任务

可以看出上面两个方法的实现基本是对系统实现的重复,只不过增加了与用户任务相关的clean up操作

也就是说,必须依次经过了readyexecuting这两个状态之后才能变为finished状态

  1. cache中有关于该请求的有效缓存,且该请求的策略允许從缓存中读取

原因就在于在这种路径上直接将ASIHTTPRequest的isFinished设置成为了YES, 违背了本文第2节中提到的第二点注意事项
修改之后,一个ASIHTTPRequest的状态转换如下:

我要回帖

更多关于 使用s 的文章

 

随机推荐