iOS多線程中使用NSNotification

NSNotification!對就是它涝滴,看著代碼比較惡心,后期難以維護(hù)的一種回調(diào)傳值模式——通知胶台。(不能黑它狭莱,它也是蘋果的一種常用的Api設(shè)計模式,它有它特定的使用場景概作,不再多說了,可以在AFNetWorking搜索下NSNotification默怨,很多啊讯榕,有木有)

什么?它也有多線程使用的問題存在?notification 在多線程的情況下愚屁,線程的管理非常不好控制济竹。這個怎么理解呢?

先看官方文檔的解釋:Regular notification centers deliver notifications on the thread in which the notification was posted. Distributed notification centers deliver notifications on the main thread. At times, you may require notifications to be delivered on a particular thread that is determined by you instead of the notification center. For example, if an object running in a background thread is listening for notifications from the user interface, such as a window closing, you would like to receive the notifications in the background thread instead of the main thread. In these cases, you must capture the notifications as they are delivered on the default thread and redirect them to the appropriate thread.

文檔意思總結(jié)來說就是:NSNotification接受線程是基于發(fā)送消息的線程的霎槐,也就是要同步啦送浊。如果你發(fā)送的消息不在主線程,接受消息就會自動在子線程中執(zhí)行(不管你在主線程或者是子線程中注冊消息)丘跌。那怎么辦袭景?在你收到消息通知的時候,注意選擇你要執(zhí)行的線程闭树。如果在子線程中發(fā)送消息耸棒,則需要重定向到主線程中執(zhí)行任務(wù)(比如刷新UI)。

話不多說报辱,上代碼与殃。

在子線程中執(zhí)行消息的情況。

注冊和發(fā)送通知碍现,其中發(fā)送通知在子線程

看打印幅疼,testNotify通知執(zhí)行由于受在子線程中發(fā)通知的影響,也在子線程中執(zhí)行昼接。

打印結(jié)果

怎么辦爽篷?

1.先說一個比較low的辦法,在sendNotify函數(shù)中強(qiáng)制切到主線程辩棒,代碼省略狼忱,大家應(yīng)該都懂得。缺陷是每一個響應(yīng)函數(shù)都強(qiáng)制切換線程一睁。這樣帶來的問題就是每一處理響應(yīng)通知的代碼你都得這樣做钻弄,對于開發(fā)者而言負(fù)擔(dān)太大。

2.從定向到主線程執(zhí)行者吁。

apple 從 iOS4 之后提供了帶有 block 的 NSNotification窘俺。使用方式如下:

-(id)addObserverForName:(NSString*)nameobject:(id)objqueue:(NSOperationQueue*)queue

用block的方法注冊和執(zhí)行通知

此時,看打印

此時block根據(jù)queue(main queue)的設(shè)置复凳,在主線程中執(zhí)行

我們通過這個采用block執(zhí)行通知的新的注冊通知的方法瘤泪,只要設(shè)置[NSOperationQueuemainQueue],輕松實現(xiàn)在主線程中執(zhí)行任務(wù)育八,so easy对途!大家可以大膽用起來。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末髓棋,一起剝皮案震驚了整個濱河市实檀,隨后出現(xiàn)的幾起案子惶洲,更是在濱河造成了極大的恐慌,老刑警劉巖膳犹,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恬吕,死亡現(xiàn)場離奇詭異,居然都是意外死亡须床,警方通過查閱死者的電腦和手機(jī)铐料,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來豺旬,“玉大人钠惩,你說我怎么就攤上這事」福” “怎么了妻柒?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長耘分。 經(jīng)常有香客問我举塔,道長,這世上最難降的妖魔是什么求泰? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任央渣,我火速辦了婚禮,結(jié)果婚禮上渴频,老公的妹妹穿的比我還像新娘芽丹。我一直安慰自己,他們只是感情好卜朗,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布拔第。 她就那樣靜靜地躺著,像睡著了一般场钉。 火紅的嫁衣襯著肌膚如雪蚊俺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天逛万,我揣著相機(jī)與錄音泳猬,去河邊找鬼。 笑死宇植,一個胖子當(dāng)著我的面吹牛得封,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播指郁,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼忙上,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了闲坎?” 一聲冷哼從身側(cè)響起晨横,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤洋腮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后手形,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡悯恍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年库糠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涮毫。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡瞬欧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出罢防,到底是詐尸還是另有隱情艘虎,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布咒吐,位于F島的核電站野建,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏恬叹。R本人自食惡果不足惜候生,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绽昼。 院中可真熱鬧唯鸭,春花似錦、人聲如沸硅确。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽菱农。三九已至缭付,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間大莫,已是汗流浹背蛉腌。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留只厘,地道東北人烙丛。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像羔味,于是被迫代替她去往敵國和親河咽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

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