0
很簡單,線程(或NSThread)和NSOperation之間是否存在一對一的連接?或者它被抽象出來的操作是一種可以被後臺中的多線程拾起並運行的任務嗎?NSOperation是否會產生一個新線程?
很簡單,線程(或NSThread)和NSOperation之間是否存在一對一的連接?或者它被抽象出來的操作是一種可以被後臺中的多線程拾起並運行的任務嗎?NSOperation是否會產生一個新線程?
不是一對一的連接,沒有。使用NSOperation
子類的優點是您不需要自己管理多線程。蘋果甚至(容易混淆)典型NSOperation
子類(即一個重寫-main
方法)定義爲:非併發,不是因爲它不支持併發性,但由於併發的細節是由超管理:
不要被術語混淆:僅僅因爲一個操作是非併發的,並不意味着它不能同時執行,它只是意味着你不必自己處理併發。
在這個意義上說,一個NSOperation
子更像NSThread的 detachNewThreadSelector:toTarget:withObject:
的目標對象。
如果您想控制併發行爲的方式,替代方法是在調用-main
之前覆蓋-start
並根據需要設置併發。
這裏有一個很好的概述:Managing Concurrency with NSOperation
所以該行本文件中說,沒有一到一個連接?它說重寫-main是不是併發的?非併發只是意味着它可以並行運行,不一定它可以運行或不運行在同一個nsthread上,是正確的嗎? – Ying 2011-05-13 12:24:21
我已經從文檔中引用並澄清了區別。 – 2011-05-13 15:28:55