Ios 完成块中的调用操作没有内存泄漏
我正在使用swift创建一个iOS应用程序 假设我想在与主线程不同的线程中对数组进行排序。我可以将NSOperation子类化如下:Ios 完成块中的调用操作没有内存泄漏,ios,swift,nsoperation,Ios,Swift,Nsoperation,我正在使用swift创建一个iOS应用程序 假设我想在与主线程不同的线程中对数组进行排序。我可以将NSOperation子类化如下: import UIKit class Operation: NSOperation { var array:[Int] init(array:[Int]){ self.array=array println("Operation init") } deinit{ println
import UIKit
class Operation: NSOperation {
var array:[Int]
init(array:[Int]){
self.array=array
println("Operation init")
}
deinit{
println("Operation deinit")
}
override func main() {
for i in 0..<array.count{
for j in 0..<array.count{
if array[i]<array[j]{
let k = array[i]
array[i] = array[j]
array[j] = k
}
}
}
}
}
我的问题是:如果我在operation.completionBlock中调用operation.array,操作将永远不会被释放,那么我如何在completion block(或其他地方)中检索已排序的数组
我能找到办法。这是为了创建一个仅以数组作为属性的对象,并将此对象传递给Operation,然后我将能够在对象中检索数组,但肯定它确实存在一种更好的方法
谢谢有几种方法可以解决这个问题。这里有一个:
operation.completionBlock = { [unowned operation] in
operation.array // use your array
}
operation.completionBlock = {
println("done")
// other stuff involving operation.array
operation.completionBlock = nil
}
这将在完成块结束时中断保留循环。操作。数组
func testSortArray() {
let array = [6,5,4,3,2,1]
let operation = Operation(array: array)
let operationQueue = NSOperationQueue()
operationQueue.addOperation(operation)
operation.completionBlock = {
println("done \(operation.array)")
}
}
func testSortArray() {
let array = [6,5,4,3,2,1]
let operation = Operation(array: array)
let operationQueue = NSOperationQueue()
operationQueue.addOperation(operation)
operation.completionBlock = {
println("done \(operation.array)")
}
}