數(shù)據(jù)傳遞的三種方法:通知,代理旬渠,blcok

Blocks是C語言的擴充功能俱萍。用一句話來表示Blocks的擴充功能:帶有自動變量(局部變量)的匿名函數(shù)。

block其實是一個代碼塊告丢,block本身也可以被作為參數(shù)在方法和函數(shù)間傳遞枪蘑,這就給予了block無限的可能。

數(shù)據(jù)傳遞有三種方法:通知岖免,代理岳颇,block.

而對于通知代理block的選擇

1)如果數(shù)據(jù)傳遞兩個對象沒有聯(lián)系。選擇通知颅湘。

2)如果兩個對象有聯(lián)系的話话侧,三個都可以。

3)能用代理的地方 一定也可以用block去代替闯参。

首先說一下通知瞻鹏。

通知 有三個屬性。一個是通知的名稱name鹿寨。 通知的發(fā)布者object.一個是通知要傳遞的數(shù)據(jù)useInfo(可以為nil)新博。

發(fā)布通知的方法:

一般用 [NSNotificationCenter?defaultCenter] 方法來創(chuàng)建通知中心通知中心(NSNotificationCenter)提供了相應(yīng)的方法來幫助發(fā)布通知

- (void)postNotification:(NSNotification*)notification;發(fā)布一個notification通知,可在notification對象中設(shè)置通知的名稱脚草、通知發(fā)布者赫悄、額外信息等

- (void)postNotificationName:(NSString*)aName object:(id)anObject;發(fā)布一個名稱為aName的通知,anObject為這個通知的發(fā)布者

- (void)postNotificationName:(NSString*)aName object:(id)anObject userInfo:(NSDictionary*)aUserInfo;發(fā)布一個名稱為aName的通知馏慨,anObject為這個通知的發(fā)布者埂淮,aUserInfo為額外信息

通知中心(NSNotificationCenter)提供了方法來注冊一個監(jiān)聽通知的監(jiān)聽器(Observer)

- (void)addObserver:(id)observer selector:(SEL)aSelector name (NSString*)aName object:(id)anObject;

observer:監(jiān)聽器,即誰要接收這個通知

Selector:收到通知后写隶,回調(diào)監(jiān)聽器的這個方法同诫,并且把通知對象當做參數(shù)傳入Name:通知的名稱。如果為nil樟澜,那么無論通知的名稱是什么误窖,監(jiān)聽器都能收到這個通知

Object:通知發(fā)布者。如果為anObject和aName都為nil秩贰,監(jiān)聽器都收到所有的通知

第二種注冊監(jiān)聽器的方法

- (id)addObserverForName:(NSString*)name object:(id)obj queue:(NSOperationQueue*)queue usingBlock:(void (^)(NSNotification*note))block;

name:通知的名稱

obj:通知發(fā)布者

block:收到對應(yīng)的通知時霹俺,會回調(diào)這個block

queue:決定了block在哪個操作隊列中執(zhí)行,如果傳nil毒费,默認在當前操作隊列中同步執(zhí)行

取消注冊通知監(jiān)聽器

通知中心不會保留(retain)監(jiān)聽器對象丙唧,在通知中心注冊過的對象,必須在該對象釋放前取消注冊觅玻。否則想际,當相應(yīng)的通知再次出現(xiàn)時培漏,通知中心仍然會向該監(jiān)聽器發(fā)送消息。因為相應(yīng)的監(jiān)聽器對象已經(jīng)被釋放了胡本,所以可能會導(dǎo)致應(yīng)用崩潰

通知中心提供了相應(yīng)的方法來取消注冊監(jiān)聽器

-(void)removeObserver:(id)observer;

-(void)removeObserver:(id)observer name:(NSString*)aName object:(id)anObject;


然后說一下代理牌柄。也是個人最喜歡用的。要分清被代理者和代理者侧甫。

被代理者 有四部分

1)首先定義代理(協(xié)議名稱的命名規(guī)范:控件類名+Delegate)

2)定義代理方法珊佣。(需要傳遞的屬性,還有把自己本身傳過去)這里要注意披粟。代理

3)設(shè)置屬性咒锻。這里要注意代理的屬性要使用weak。

4)在需要傳遞值的地方去調(diào)用代理的方法守屉。(要判斷代理方法是否可以調(diào)用)

在代理者需要三步惑艇。

1)遵守代理協(xié)議。

2)設(shè)置代理拇泛。

3實現(xiàn)代理方法

個人覺得代理比較簡單滨巴。而且比較好理解。非常的規(guī)整碰镜。


下面說一下第三種Block

1)首先要在需要傳遞數(shù)據(jù)的類中定義一個block 屬性為要傳遞數(shù)據(jù)的類型

block的屬性要和NSString 一樣 為copy.

2)在需要傳遞數(shù)據(jù)的地方 實現(xiàn)Blcok方法。首先要判斷block是否可用习瑰。

然后把數(shù)據(jù)回調(diào)绪颖。

3)在需要數(shù)據(jù)的類中定義一個block 把數(shù)據(jù)接過去。


個人理解 block比代理要簡單甜奄。

但是代理會看著比較清晰柠横。讓人理解。

所執(zhí)行的步驟也都差不多课兄。

只是把被代理者中的設(shè)置代理 轉(zhuǎn)變成設(shè)置block接過去牍氛。然后設(shè)置一個Block去接一下回調(diào)的值。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末烟阐,一起剝皮案震驚了整個濱河市搬俊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蜒茄,老刑警劉巖唉擂,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異檀葛,居然都是意外死亡玩祟,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門屿聋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來空扎,“玉大人藏鹊,你說我怎么就攤上這事∽猓” “怎么了盘寡?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長黑忱。 經(jīng)常有香客問我宴抚,道長,這世上最難降的妖魔是什么甫煞? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任菇曲,我火速辦了婚禮,結(jié)果婚禮上抚吠,老公的妹妹穿的比我還像新娘常潮。我一直安慰自己,他們只是感情好楷力,可當我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布喊式。 她就那樣靜靜地躺著,像睡著了一般萧朝。 火紅的嫁衣襯著肌膚如雪岔留。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天检柬,我揣著相機與錄音献联,去河邊找鬼。 笑死何址,一個胖子當著我的面吹牛里逆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播用爪,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼原押,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了偎血?” 一聲冷哼從身側(cè)響起诸衔,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颇玷,沒想到半個月后署隘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡亚隙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年磁餐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡诊霹,死狀恐怖羞延,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情脾还,我是刑警寧澤伴箩,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站鄙漏,受9級特大地震影響嗤谚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜怔蚌,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一巩步、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧桦踊,春花似錦椅野、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至杖狼,卻和暖如春炼蛤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蝶涩。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工理朋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人子寓。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓暗挑,卻偏偏與公主長得像笋除,于是被迫代替她去往敵國和親斜友。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,870評論 2 361

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

  • 代理 代理設(shè)計模式的作用: 1.A對象監(jiān)聽B對象的一些行為垃它,A成為B的代理 2.B對象想告訴A對象一些事...
    Hevin_Chen閱讀 228評論 0 0
  • 概述 在多數(shù)移動應(yīng)用中任何時候都只能有一個應(yīng)用程序處于活躍狀態(tài)鲜屏,如果其他應(yīng)用此刻發(fā)生了一些用戶感興趣的那么通過通知...
    莫離_焱閱讀 6,521評論 1 8
  • 在MVC模式中,M:模型国拇,是用來做數(shù)據(jù)操作的洛史;V:視圖,是用來展示界面的酱吝;C:控制器也殖,對視圖中的控件的行為進行操作...
    FallPine閱讀 276評論 0 0
  • 今夜微涼忆嗜,修改完之前備好的課程己儒,瞧瞧時間,喔捆毫,又是新的一天了闪湾。準備關(guān)機洗洗,卻發(fā)現(xiàn)微信的圖標還在閃爍绩卤,于是點開途样,看...
    阿了個貍閱讀 1,236評論 1 1
  • 考試結(jié)束了,我也要成為準大二的學姐了 大一這一年真的過得好快濒憋,我收獲了好多也懂得了好多學到了好多也失去過一些何暇,我有...
    是琳閱讀 152評論 0 1