Swift 面试题
目录

Swift 中如何取消 Operation?

· 约 3 分钟读完 · 第 146 / 196 章

推荐答案

在 Swift 中,可以通过调用 Operation 实例的 cancel() 方法来取消一个操作。取消操作后,Operation 的 isCancelled 属性会被设置为 true,但操作并不会立即停止执行,开发者需要在操作的具体实现中检查 isCancelled 属性,并在适当的时候停止操作。

本题详细解读

1. Operation 的取消机制

Operation 是 Swift 中用于封装任务的一个类,通常与 OperationQueue 一起使用来管理并发任务。Operation 提供了 cancel() 方法,用于取消一个操作。调用 cancel() 方法后,Operation 的 isCancelled 属性会被设置为 true,但操作并不会立即停止执行。

2. 如何正确取消 Operation

虽然调用 cancel() 方法会标记操作为取消状态,但操作的具体实现中需要手动检查 isCancelled 属性,并在适当的时候停止操作。例如,在 BlockOperation 的闭包中,可以在执行任务之前检查 isCancelled 属性,如果操作已被取消,则直接返回。

3. Operation 的生命周期

Operation 的生命周期包括以下几个状态:

  • Pending: 操作还未开始执行。
  • Executing: 操作正在执行。
  • Finished: 操作已完成。
  • Cancelled: 操作已被取消。

当操作被取消时,isCancelled 属性会被设置为 true,但操作的状态不会立即变为 Finished,直到操作的具体实现中检查并处理了取消状态。

4. 注意事项

  • 取消操作并不会立即停止任务的执行:开发者需要在操作的具体实现中检查 isCancelled 属性,并在适当的时候停止操作。
  • 取消操作后,操作的状态不会立即变为 Finished:只有在操作的具体实现中处理了取消状态后,操作的状态才会变为 Finished。

通过正确使用 cancel() 方法和检查 isCancelled 属性,可以有效地管理和取消 Operation 任务。