NSOperation取消:NSInvocationOperation或NSOperation子类?

时间:2011-03-17 20:13:17

标签: iphone objective-c ipad nsoperation

我有一个相当简单但很昂贵的任务,我需要在后台运行,这是标准的NSOperation情况。我还需要确保操作支持取消,并适当停止。鉴于这个要求,这是更好的方法:只是在NSInvocationOperation中包装昂贵的方法调用,或从头开始编写NSOperation子类?

到目前为止,这是我的想法。 NSInvocationOperations是我的第一选择,也是我过去使用的,因为任务非常简单,我不想编写一个包含所有NSOperation样板代码的整个类来执行它。现在让我犹豫不决的事实是,在NSInvocationOperation中执行的方法似乎没有办法检查是否在我脑海中没有引起hackery警报的取消。有关所述hackery的一些示例,请参阅this question。我试过了,他们确实工作了,他们也觉得很蠢。

如前所述,编写一个NSOperation子类似乎有点过于执行简单任务,但毫无疑问,检查取消比我在NSInvocationOperation中遇到的任何内容都要优雅。

那么,对于那些拥有更多NSOperations的人来说,哪些人已经习惯了最成功的结局?使用我可能错过的NSInvocationOperations是否有一个很好的取消解决方案?如果没有对取消的某种支持,那么NSInvocationOperations有用的情况就会岌岌可危。

2 个答案:

答案 0 :(得分:2)

我认为,对NSOperation进行子类化是唯一优雅的方法。

当我将现有代码重构为多线程时,我倾向于只使用NSInvocationOperations,那么它是一个方便的快捷方式。

答案 1 :(得分:1)

只是NSOperation的子类。 (需要更多字符)