Ich erstelle eine iOS-App mit swift.Aufrufoperation im Abschlussblock ohne Speicherleck
Nehmen wir an, ich möchte ein Array in einem anderen Thread als der Haupt-Thread. Ich NSOperation wie die Unterklasse kann:
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
}
}
}
}
}
In meinem Viewcontroller, ich so etwas wie verwenden:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let array = [6,5,4,3,2,1]
let operation = Operation(array: array)
let operationQueue = NSOperationQueue()
operationQueue.addOperation(operation)
operation.completionBlock = {
println("done")
}
}
}
Meine Frage ist: denn wenn ich operation.array in operation.completionBlock nennen, den Betrieb wird nie freigegeben werden, Wie kann ich das sortierte Array im Completion-Block (oder anderswo) abrufen?
Ich kann einen Weg sehen. Es ist ein Objekt mit nur dem Array als Eigenschaft zu erstellen und dieses Objekt an Operation übergeben, dann kann ich das Array innerhalb des Objekts abrufen, aber es gibt einen besseren Weg.
Danke