【发布时间】:2017-02-09 05:11:18
【问题描述】:
我刚刚开始实现一些操作子类,它为我处理一些异步工作,比如下载。我很好奇管理队列的最佳实践,特别是要确保我不会两次添加相同的任务。
有没有一种方法可以将操作添加到带有名称的队列中,或者是否可以创建和管理字典?比如说,当项目被添加到队列中时,您将条目附加到字典中,当它们完成时,您从字典中删除条目?事先进行条件检查?
这很容易实现,因为操作子类中有一个通知块。只是看起来有点hacky。
感谢您的建议。
---- 编辑----
因此尝试在其他地方使用此 for 循环 (cellForItemAt) 来显示活动指示器,如果项目在队列中,但它似乎只检查队列的第一项并返回,但即使队列中有多个操作也不会返回其他项具有唯一名称:
for operation in downloadQueue.operations {
if operation.name == self.multiPartArray[collectionView.tag][indexPath.item].name { innerCell.contentView.addSubview(self.activityIndicatorView) self.activityIndicatorView.centerXAnchor.constraint(equalTo: innerCell.contentView.centerXAnchor).isActive = true self.activityIndicatorView.centerYAnchor.constraint(equalTo: innerCell.contentView.centerYAnchor).isActive = true
self.activityIndicatorView.isHidden = false
self.activityIndicatorView.startAnimating()
innerCell.contentView.bringSubview(toFront: self.activityIndicatorView)
break
} else {
print("Operation not in queue")
}
}
向队列添加操作时似乎在做同样的事情。它检查第一个操作。如果 != opName 则即使 opName 存在于队列中但不是第一项,它也会添加操作。
【问题讨论】:
-
你可以用 for in 来做。
标签: ios swift nsoperationqueue