ios – 在完成块中调用操作而没有内存泄漏

前端之家收集整理的这篇文章主要介绍了ios – 在完成块中调用操作而没有内存泄漏前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用 swift创建一个iOS应用程序.

假设我想在主线程的不同线程中对数组进行排序.我可以像这样继承NSOperation:

  1. import UIKit
  2.  
  3. class Operation: NSOperation {
  4.  
  5. var array:[Int]
  6.  
  7. init(array:[Int]){
  8. self.array=array
  9. println("Operation init")
  10. }
  11.  
  12. deinit{
  13. println("Operation deinit")
  14. }
  15.  
  16. override func main() {
  17. for i in 0..<array.count{
  18. for j in 0..<array.count{
  19. if array[i]<array[j]{
  20. let k = array[i]
  21. array[i] = array[j]
  22. array[j] = k
  23. }
  24. }
  25. }
  26. }
  27.  
  28. }

在我的ViewController中,我可以使用类似的东西:

  1. import UIKit
  2.  
  3. class ViewController: UIViewController {
  4.  
  5. override func viewDidLoad() {
  6. super.viewDidLoad()
  7. let array = [6,5,4,3,2,1]
  8. let operation = Operation(array: array)
  9. let operationQueue = NSOperationQueue()
  10. operationQueue.addOperation(operation)
  11. operation.completionBlock = {
  12. println("done")
  13. }
  14. }
  15. }

我的问题是:因为如果我在operation.completionBlock中调用operation.array,操作将永远不会被释放,如何在完成块(或其他地方)中检索已排序的数组?

我可以看到一种方式.这是创建一个只有数组作为属性的对象,并将此对象传递给Operation然后我将能够检索对象中的数组,但肯定它确实存在更好的方法.

谢谢

解决方法

  1. operation.completionBlock = { [unowned operation] in
  2. operation.array // use your array
  3. }

猜你在找的iOS相关文章