block個人使用小結(jié)

block簡介

block是一種基本的數(shù)據(jù)類型,用于存儲代碼塊,在需要的時候調(diào)用,與函數(shù)的區(qū)別是函數(shù)保存的代碼,一旦調(diào)用立即執(zhí)行,block可以在需要時候執(zhí)行.

形式如下:

返回值 (^block名稱)(參數(shù)列表) = ^(參數(shù)列表) {

代碼塊

}


block基本形式

通過返回值和參數(shù)的組合有四種形式:

有參數(shù)有返回值的block

無參數(shù)有返回值的block

沒有返回值有參數(shù)的block

沒有返回值沒有參數(shù)的block


block的typedef使用


和其他的其別名類似,只是block的類型是: ?返回值 (^)()

如下:


block起別名

DemoBlock就是返回值是int 有兩個參數(shù)為int類型的block, 返回值和參數(shù)是這種類型都是DemoBlock.

block別名使用

block的使用

block作為方法的參數(shù)

block作為作為類的屬性

block作為屬性應(yīng)該用copy修飾

1.當(dāng)用weak序苏、assign修飾block屬性時呻顽,block訪問外部變量捺典,此時block的類型是棧block. 保存在棧中的block, 當(dāng)block所在函數(shù)\\方法返回\\結(jié)束, 該block就會被銷毀. 在其他方法內(nèi)部調(diào)用訪問該block, 就會引發(fā)野指針錯誤.

2.當(dāng)用copy时鸵、strong修飾block屬性時, block訪問外部變量, 此時block的類型是堆block. 保存在堆中的block, 當(dāng)引用計數(shù)器為0時被銷毀, 該類型block是由棧類型的block從棧中復(fù)制到堆中形成的, 因此可以在其他方法內(nèi)部調(diào)用該block. 在ARC下胀蛮,strong和copy都可以用來修飾block, 但是建議修飾block屬性使用copy.


這兩種是block的常用使用方式,具體在下面代碼中展示.


block傳值與回調(diào)

block在傳值和回調(diào)方面和代理的作用相同,block使用簡潔方便一點,

在網(wǎng)絡(luò)異步回調(diào)時一般都使用block回調(diào),下面使用兩個小案例進行演示.

第一個: 反向傳值,將一個參數(shù)從一個控制器傳到另一個控制器.


A控制器


B控制器

將輸入的文本從B控制器點擊點擊按鈕傳到A控制器

代碼實現(xiàn)部分

B控制器添加一個block屬性


block屬性

添加按鈕,在點擊的時候?qū)⑽谋究騼?nèi)的字符串傳到A控制器并返回到A控制器


block傳值

接收傳過來的數(shù)據(jù)并顯示到label上


接收數(shù)據(jù)

第二個:block回調(diào),通過一個自定義工具類回調(diào)返回數(shù)據(jù)

點擊存儲文本框中內(nèi)容,保存到沙盒,

再點擊通過自定義工具類取出沙盒內(nèi)容,回調(diào)返回數(shù)據(jù)


存取數(shù)據(jù)

控制器回調(diào)方法

回調(diào)方法

自定義工具類類方法

類方法


block傳值與回調(diào)Demo的源碼

源碼地址 https://git.oschina.net/weidream/MyCode.git


block的使用注意事項

1.block內(nèi)部不能直接修改局部變量

block內(nèi)部可以訪問外部的變量, 默認(rèn)是將其拷貝到其數(shù)據(jù)結(jié)構(gòu)中來實現(xiàn)訪問的, 屬性是只讀的. ?block內(nèi)部不能修改外面的局部變量.

如果要修改需要對要修改的局部變量用__block 修飾, 這樣局部變量就可以在block內(nèi)部修改了倘零,block是復(fù)制其引用地址來實現(xiàn)訪問的

2.當(dāng)block里面的出現(xiàn)self,造成的循環(huán)引用

循環(huán)引用就是當(dāng)self 擁有一個block的時候, 在block中又調(diào)用self的方法. 形成了你中有我, 我中有你, 造成誰都無法將誰釋放, 從而發(fā)生內(nèi)存泄漏.

解決方法:

__weak typeof (self) weakSelf = self;

定義一個weakSelf變量并加上__weak修飾符, 在Block代碼塊中, 所有需要self的地方都用weakSelf來替代铛绰。這樣就不會增加引用計數(shù), 所以Block持有self對象也就不會造成循環(huán)引用舞吭,從而造成內(nèi)存泄漏.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绰上,一起剝皮案震驚了整個濱河市旨怠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蜈块,老刑警劉巖运吓,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異疯趟,居然都是意外死亡拘哨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門信峻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倦青,“玉大人,你說我怎么就攤上這事盹舞〔洌” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵踢步,是天一觀的道長癣亚。 經(jīng)常有香客問我,道長获印,這世上最難降的妖魔是什么述雾? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮兼丰,結(jié)果婚禮上玻孟,老公的妹妹穿的比我還像新娘。我一直安慰自己鳍征,他們只是感情好黍翎,可當(dāng)我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著艳丛,像睡著了一般匣掸。 火紅的嫁衣襯著肌膚如雪趟紊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天碰酝,我揣著相機與錄音织阳,去河邊找鬼。 笑死砰粹,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的造挽。 我是一名探鬼主播碱璃,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼饭入!你這毒婦竟也來了嵌器?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤谐丢,失蹤者是張志新(化名)和其女友劉穎爽航,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乾忱,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡讥珍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了窄瘟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衷佃。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蹄葱,靈堂內(nèi)的尸體忽然破棺而出氏义,到底是詐尸還是另有隱情,我是刑警寧澤图云,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布惯悠,位于F島的核電站,受9級特大地震影響竣况,放射性物質(zhì)發(fā)生泄漏克婶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一丹泉、第九天 我趴在偏房一處隱蔽的房頂上張望鸠补。 院中可真熱鬧,春花似錦嘀掸、人聲如沸紫岩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泉蝌。三九已至歇万,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間勋陪,已是汗流浹背贪磺。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留诅愚,地道東北人寒锚。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像违孝,于是被迫代替她去往敵國和親刹前。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,665評論 2 354

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