2016-02-23 114 views
1

讓說,我在一些類函數例如爲:NSOperationQueue會保留在內存中多久?

- (void)synchronize() { 
    NSOperationQueue *bgOperation = [NSOperationQueue new]; 
    [bgOperation addOperations:@[fetchDataOperation, saveDataOperation, completionOperation] waitUntilFinished:NO]; 
} 

此操作隊列是否會留在內存中,直到它包含被完成或會從內存中取出時的方法範圍將結束所有的經營範圍有bgQueue

我想知道操作是否在內存隊列中存在,它們屬於哪個?

回答

2

我無法在文檔中找到一個好的答案,但我建立了一個測試案例來弄清楚。看起來,即使沒有引用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 
+0

我這麼問是因爲我還沒有看到任何東西關於在文檔中,我已經執行了一些測試,結果與您的一樣。隊列停留在內存中,直到每個操作完成。 – Robert