Sto creando un'app per iOS utilizzando swift.Operazione di chiamata nel blocco di completamento senza perdita di memoria
Diciamo che voglio ordinare una matrice in un thread diverso che il thread principale. Posso sottoclasse NSOperation così:
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
}
}
}
}
}
Nel mio ViewController, posso usare qualcosa come:
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")
}
}
}
La mia domanda è: perché se chiamo operation.array in operation.completionBlock, operazione non sarà mai essere rilasciato, come posso recuperare l'array ordinato nel blocco di completamento (o altrove)?
Posso vedere un modo. È per creare un oggetto con la sola matrice come proprietà e passare questo oggetto a Operazione, quindi sarò in grado di recuperare la matrice all'interno dell'oggetto ma sicuramente esiste un modo migliore.
Grazie