我無法在文檔中找到一個好的答案,但我建立了一個測試案例來弄清楚。看起來,即使沒有引用NSOperationQueue
,該隊列仍會保留,直到所有操作完成。
這裏的示例代碼,我跑runLotsOfPrints()
從iOS應用中:
func runLotsOfPrints() {
var loopCount = 0
let maxPrintCount = 10000
var operations: [NSOperation] = []
while loopCount < maxPrintCount {
let newOperation = localOperation()
newOperation.localNumber = loopCount
operations.append(newOperation)
loopCount += 1
}
let queue = localOperationQueue()
queue.addOperations(operations, waitUntilFinished: false)
}
class localOperation: NSOperation {
var localNumber: Int = 0
override func main() {
super.main()
NSLog("localN - \(self.localNumber)")
}
}
class localOperationQueue: NSOperationQueue {
deinit {
print("deinit - QUEUE")
}
}
生成的日誌輸出如下:
2016-02-23 10:50:51.388 RobotsAreMyFriends[12363:35784085] localN - 1
2016-02-23 10:50:51.388 RobotsAreMyFriends[12363:35784114] localN - 2
...
2016-02-23 10:50:51.389 RobotsAreMyFriends[12363:35784131] localN - 9998
2016-02-23 10:50:51.388 RobotsAreMyFriends[12363:35784108] localN - 9997
2016-02-23 10:50:51.389 RobotsAreMyFriends[12363:35784113] localN - 9999
2016-02-23 10:50:51.476 RobotsAreMyFriends[12363:35784108] deinit - QUEUE
我這麼問是因爲我還沒有看到任何東西關於在文檔中,我已經執行了一些測試,結果與您的一樣。隊列停留在內存中,直到每個操作完成。 – Robert