IOS 代理協(xié)議傳值

順傳

假設(shè)A為第一個視圖控制器,B為第二個視圖控制器

在A中導入B的.h文件

場景:A向B傳值

第一步:在B的.h中定義一個content屬性

@interfaceSecondViewController:UIViewController@property(nonatomic,copy)NSString*contents;@end

第二步:在點擊A中的按鈕方法里面給B的content屬性賦值

- (void)buttonAction:(UIButton*)button {NSLog(@"進入第二頁");? ? SecondViewController *secondVC = [SecondViewController alloc] init];? ? secondVC.contents =self.label.text;? ? [self.navigationController pushViewController:secondVC animated:YES]; }

第三部:在B使用content的屬性給相應的控件賦值

@implemention SecondViewController- (void)viewDidLoad {? ? [superviewDidLoad];self.view.backgroundColor = [UIColorwhiteColor];self.navigationItem.title =self.contents; }

逆?zhèn)?/p>

代理傳值使用在兩個界面?zhèn)髦档闹蟾П剩瑥暮笙蚯皞髦怠?/p>

假設(shè)A為第一個視圖控制器,B為第二個視圖控制器

場景:B向A傳值

第一步:首先在B的.h文件中聲明協(xié)議和協(xié)議方法

第二步:在B的.h中聲明一個代理屬性陷猫,這里主要注意用assign或weak修飾切端,weak和assign是一種非擁有關(guān)系的指針,通過這兩種修飾符修飾的指針變量珍逸,都不會改變被引用的對象的引用計數(shù)吵取。但是在一個對象被釋放后禽额,weak會自動將指針指向nil,而assign則不會皮官。所以脯倒,用weak更安全些。

@property (nonatomic,weak)id<協(xié)議名>delegate臣疑;

#pragma mark 這里是B的.h#import@protocolCsutomTabBarDelegate// 把btn的tag傳出去的方法- (void)selectedIndexWithTag:(NSInteger)tag;@end@interfaceCustomTabBarView:UIView//聲明一個代理屬性delegate@property(nonatomic,weak)iddelegate;@end

第三部:在B即將POP回前一個界面的時候盔憨,在pop方法的上一行使用協(xié)議方法傳遞數(shù)據(jù)[self.delegate 協(xié)議方法名:(參數(shù),也就是要傳回的數(shù)據(jù))

#pragma mark 這里是B的.m// 判斷在制定的代理類中是否實現(xiàn)了該協(xié)議方法// 確保執(zhí)行時無此方法時不崩潰if([self.delegate respondsToSelector:@selector(selectedIndexWithTag:)]){// 執(zhí)行代理方法[self.delegate selectedIndexWithTag:(sender.tag -1000)];}else{NSLog(@"協(xié)議中的方法沒有實現(xiàn)");}

在A的.m中讯沈,在push到B界面方法之前郁岩,B對象的初始化之后,指定A對象為B對象的代理(B對象).delegate = self此時會有黃色警告缺狠,因為沒有準守協(xié)議

#pragmamark A的.m中// 指定代理问慎,B就是customViewcustomView .delegate=self;

第五步:在A的延展或者A的.h文件中導入?yún)f(xié)議名稱<協(xié)議名稱>

#pragma mark A的.m的延展里,A就是RootTabBarController// 協(xié)議導入@interfaceRootTabBarController() @end

第六步:在A的.m中事項協(xié)議方法挤茄,取得參數(shù)中得知如叼,呈現(xiàn)在當前界面上

#pragma mark A的.m// 實現(xiàn)代理方法,這里就可以使用從B傳來的值了- (void)selectedIndexWithTag:(NSIngeter)tag {self.selectedIndex = tag; }

使用Block頁面間傳值

第一步:在B的.h中重定義一個block穷劈,用這個重定義的block類型聲明一個類的屬性這里要注意用copy修飾block屬性

#pragma mark B的.h #import// block傳值? // 重命名一個有參無返回值的block類型? typedefvoid(^passValue)(NSIntegertag);@interfaceCustomTabBarView:UIView//用這個block類型定義一個屬性? @property(nonatomic,copy)passValue passValueTag;@end

第二步:在B的.m的返回方法中調(diào)用block的方法

#pragmamark B的.m的返回方法中? //調(diào)用block方法self.passValueTag(sender.tag -1000);

第三步:在A的.m中創(chuàng)建B的實例的地方笼恰,為B的block屬性賦值踊沸,也就是說,寫好這個block中的內(nèi)容社证,類似于給B的某一個屬性賦初值

// 設(shè)置block內(nèi)容? customView.passValueTag = ^(NSIntegertag)? ? {self.selectedIndex = tag;? ? };

沒有引用局部變量的Block內(nèi)存存儲在全局區(qū)

引用了局部變量的Block內(nèi)存存儲在棧區(qū)

當對Block進行copy操作的時候Block的內(nèi)存存在堆區(qū)

Block的循環(huán)引用問題

當Block是self的一個屬性的時候

self.circleBlock = ^(){my_self.navigationItem.title = @"Hello";};

會導致self的引用計數(shù)+1逼龟,最終導致循環(huán)引用

在ARC下使用weak修飾變量防止循環(huán)引用

在非ARC下使用block修飾變量防止循環(huán)引用

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市追葡,隨后出現(xiàn)的幾起案子腺律,更是在濱河造成了極大的恐慌,老刑警劉巖宜肉,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匀钧,死亡現(xiàn)場離奇詭異,居然都是意外死亡谬返,警方通過查閱死者的電腦和手機之斯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來朱浴,“玉大人吊圾,你說我怎么就攤上這事『泊溃” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵啰劲,是天一觀的道長梁沧。 經(jīng)常有香客問我,道長蝇裤,這世上最難降的妖魔是什么廷支? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮栓辜,結(jié)果婚禮上恋拍,老公的妹妹穿的比我還像新娘。我一直安慰自己藕甩,他們只是感情好施敢,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著狭莱,像睡著了一般僵娃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腋妙,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天默怨,我揣著相機與錄音,去河邊找鬼骤素。 笑死匙睹,一個胖子當著我的面吹牛愚屁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播痕檬,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼霎槐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谆棺?” 一聲冷哼從身側(cè)響起栽燕,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎改淑,沒想到半個月后碍岔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡朵夏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年蔼啦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仰猖。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡捏肢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出饥侵,到底是詐尸還是另有隱情鸵赫,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布躏升,位于F島的核電站辩棒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏膨疏。R本人自食惡果不足惜一睁,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望佃却。 院中可真熱鬧者吁,春花似錦、人聲如沸饲帅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洒闸。三九已至染坯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丘逸,已是汗流浹背单鹿。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留深纲,地道東北人仲锄。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓劲妙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親儒喊。 傳聞我的和親對象是個殘疾皇子镣奋,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

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