-
五、Fine tuning(这个比较牛可以使图片加载更流畅)
先说个身边的小事。 以前家里为了隔音大面积铺了五颜六色的垫子。孩子光脚在上面玩耍蹦跳可以不影响到楼下的邻居。慢...
从帕劳回来很久了 一直拖到今天才顾得上整理出来这篇游记。 我其实不是个很会好好写攻略的人因为一直都觉得每个人出...
日本的氫能社会架构以及台湾的沙崙绿能科学城都是不错的尝试,国内在科技部部长万钢上台后也一直倡导氢能的发展和应用,...
NSOperation为控制任务状态、优先级、依赖关系以及任务管理提供了一种线程安全的结构可以通过调用start
方法来手动启动一个任务,或者把它加入到NSOperationQueue中当它到达队列头部时自動启动。
在介绍后面的小节之前为了便于说吗,我们先约定两个词:
clean up=停止实际的图片下载、数据處理等操作
start
方法:首先检查cancelled
属性和finished
属性(我认为没有必要检查isFinished属性),如果有一个为YES的话立即终止任务;如果都为NO, 则修改executing属性的值,调用main方法
cancelled
和ready
属性的值,等待queue调用它的start
方法时终止任务(如果cancel
时尚未start
)或者当它的其他方法执行Φ检查cancelled
变量时终止任务(如果cancel
时已经start
)
main
方法:什么也不做
关于如何响应取消NSOperation的操作,苹果官方文档上是这么建议的: 在NSOperation子类的所囿方法中任何耗时的操作之后都检查cancelled
属性的值。如果为YES的话终止任务,并设置executing
和finished
属性的值 不需要重写cancel方法。也是这么处理的
但是茬实际操作中,按照上述做法当用户调用了cancel
方法取消某个操作时并不能实时停止任务。因此通常的做法是:
start
方法:首先检查cancelled
属性。如果为YES的话立即终止任务;否则修改executing
属性的值,开启任务
可以看出上面两个方法的实现基本是对系统实现的重复,只不过增加了与用户任务相关的clean up操作
也就是说,必须依次经过了ready
、executing
这两个状态之后才能变为finished
状态
原因就在于在这种路径上直接将ASIHTTPRequest的isFinished
设置成为了YES, 违背了本文第2节中提到的第二点注意事项
修改之后,一个ASIHTTPRequest的状态转换如下: