WWDC 2015 - Session 226 - Advanced NSOperations

演講者:
Philippe Hausler - Foundation Engineer
Dave DeLong - Frameworks Evangelist (主講)

NSOperation 基礎(chǔ)知識(shí)

正式 Session 筆記前伟葫,補(bǔ)點(diǎn)NSOperation的基礎(chǔ)知識(shí)艺蝴。

NSOperation 是什么池户?

NSOperation:NS = NextStep 前綴簡(jiǎn)寫;Operation 即操作框杜,通俗來(lái)講就是要做的事情,配合要處理的數(shù)據(jù)现喳,封裝成一個(gè)Operation怔接,執(zhí)行方式可以是并發(fā)方式(與并行略有不同)或非并發(fā)方式。

NSOperation 是抽象類凹耙,因此真正要使用它并需通過subclass姿现。Foundation框架為我們提供了 NSInvocationOperation 和 NSBlockOperation 兩個(gè)子類,當(dāng)然你可以自定義繼承實(shí)現(xiàn)肖抱!

NSOperation的幾個(gè)簡(jiǎn)單操作

前面說(shuō)到NSOperation是一個(gè)操作备典,通過發(fā)送start消息告知執(zhí)行;發(fā)送cancel消息告知正在執(zhí)行的操作取消虐沥。

// 執(zhí)行
operation.start()
// 取消
operation.cancel()

操作執(zhí)行完后還想進(jìn)行一些后續(xù)處理的話熊经,可以通過賦值 completionBlock 閉包即可:

operation.completionBlock = {
  // 這些是一些操作
}

Session 正文筆記

session 分三部分講解:

  • Core Concepts
  • Beyond the Basics
  • Sample Code

知識(shí)點(diǎn)一:maxConcurrentOperationCount

  • maxConcurrentOperationCount = 1
    顧名思義,最大并行操作個(gè)數(shù)為1欲险,因此隊(duì)列中的操作(NSOperation)只能是一個(gè)挨一個(gè)執(zhí)行镐依。當(dāng)前僅當(dāng)前一個(gè)操作成功執(zhí)行完畢,后一個(gè)操作才能開始執(zhí)行天试。

  • maxConcurrentOperationCount = Default
    這個(gè)就有點(diǎn)意思了槐壳,會(huì)根據(jù)系統(tǒng)當(dāng)前資源來(lái)進(jìn)行合理分配,假若資源充足喜每,那么可能一下子執(zhí)行隊(duì)列中的2個(gè)操作务唐!

知識(shí)點(diǎn)二:NSOperation 生命周期

lifecycle.png

如上圖所示具有四個(gè)階段:

  • Pending
  • Ready
  • Executing
  • Finished

每一個(gè)Operation實(shí)例化都處于Pending狀態(tài)雳攘,之后依次 Ready -> Executing -> Finished 。當(dāng)然前面說(shuō)到還有個(gè)取消狀態(tài)Cancelled枫笛,這個(gè)是有限制的吨灭,只有Pending、Ready和Executing時(shí)才可以進(jìn)行取消刑巧,換句話說(shuō)除Finished不行喧兄,其他都o(jì)k!

cancel.png

關(guān)于取消狀態(tài),Operation 采用了一個(gè)布爾值進(jìn)行標(biāo)示:

// 注意是只讀屬性
var cancelled: Bool { get }

僅是改變狀態(tài)啊楚,Operation的子類可根據(jù)該狀態(tài)執(zhí)行對(duì)應(yīng)操作吠冤。或者就是簡(jiǎn)單調(diào)用operation.cancel()方法即可恭理。

同理Read狀態(tài)也有個(gè)var ready: Bool { get }來(lái)標(biāo)示拯辙。

正如下圖所示將一組處于Pending狀態(tài)的Operation放入隊(duì)列中:

pending.png

此時(shí)第四個(gè)操作狀態(tài)改變了:Ready!

ready.png

那么對(duì)不住了,處于ready的第一個(gè)執(zhí)行颜价!其他處于pending的待命吧涯保。

那么假若有2個(gè)operation處于ready呢?答案是按串行方式進(jìn)行執(zhí)行拍嵌,哪個(gè)在前執(zhí)行哪個(gè)遭赂。

Dependencies 依賴性

說(shuō)來(lái)理解也簡(jiǎn)單,“先做這個(gè)操作横辆,后執(zhí)行那個(gè)操作”撇他,這樣就嚴(yán)格按照了執(zhí)行了順序,而不會(huì)出現(xiàn)操作混亂的情況狈蚤,這里主要通過readiness來(lái)實(shí)現(xiàn)困肩。

代碼實(shí)例:

let operationA = ...
let operationB = ...
operationB.addDependency(operationA)

這樣不得不提及一個(gè)重要的問題:死鎖。顧名思義:就是死死鎖住了脆侮,啥都干不了了锌畸。譬如現(xiàn)在有操作A和操作B,B增加了對(duì)A的關(guān)聯(lián):僅當(dāng)A操作完成后執(zhí)行B靖避;同時(shí)A增加了對(duì)B的關(guān)聯(lián):僅當(dāng)B操作執(zhí)行完成后執(zhí)行A潭枣。這時(shí)候A和B傻眼了,都在互相等對(duì)方完成幻捏,否則啥也不干盆犁,這就造成了死鎖。

對(duì)于操作間的依賴性問題篡九,請(qǐng)勿將兩個(gè)操作進(jìn)行關(guān)聯(lián)谐岁,否則勢(shì)必造成死鎖!

之后Session主要對(duì)WWDC這個(gè)App中使用到的操作進(jìn)行了講解,太具體了也就不記錄了伊佃。有興趣地可直接去官方看視頻或下demo觀看窜司。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市航揉,隨后出現(xiàn)的幾起案子塞祈,更是在濱河造成了極大的恐慌,老刑警劉巖帅涂,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件织咧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡漠秋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門抵屿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)庆锦,“玉大人,你說(shuō)我怎么就攤上這事轧葛÷悖” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵尿扯,是天一觀的道長(zhǎng)求晶。 經(jīng)常有香客問我,道長(zhǎng)衷笋,這世上最難降的妖魔是什么芳杏? 我笑而不...
    開封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮辟宗,結(jié)果婚禮上爵赵,老公的妹妹穿的比我還像新娘。我一直安慰自己泊脐,他們只是感情好空幻,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著容客,像睡著了一般秕铛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缩挑,一...
    開封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天但两,我揣著相機(jī)與錄音,去河邊找鬼调煎。 笑死镜遣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播悲关,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼谎僻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了寓辱?” 一聲冷哼從身側(cè)響起艘绍,我...
    開封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎秫筏,沒想到半個(gè)月后诱鞠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡这敬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年航夺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崔涂。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡阳掐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出冷蚂,到底是詐尸還是另有隱情缭保,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布蝙茶,位于F島的核電站艺骂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏隆夯。R本人自食惡果不足惜钳恕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦帝牡、人聲如沸铸史。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春抡砂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背恬涧。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工注益, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人溯捆。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓丑搔,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子啤月,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容