Tworzę aplikację na iOS za pomocą Swift.Operacja wywołania w bloku zakończenia bez wycieku pamięci
Załóżmy, że chcę posortować tablicę w innym wątku niż wątek główny. Mogę podklasy NSOperation tak:
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
}
}
}
}
}
W moim ViewController, mogę użyć czegoś takiego:
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")
}
}
}
Moje pytanie brzmi: ponieważ jeśli zadzwonię operation.array w operation.completionBlock, operacja nigdy zostać zwolniony, Jak mogę odzyskać posortowaną tablicę w bloku zakończenia (lub gdzie indziej)?
Widzę sposób. Jest to stworzenie obiektu z samą tablicą jako własnością i przekazanie tego obiektu do Operacji, wtedy będę mógł pobrać tablicę wewnątrz obiektu, ale na pewno istnieje lepszy sposób.
Dziękuję