iOS block代碼塊基本使用

一.block簡介

1.block是一段代碼塊鸠珠,是對c語言的拓展巍耗,用來封裝或者存儲代碼,與函數(shù)類似渐排,可以在需要的時候需要的文件中調(diào)用

2.block分為有參數(shù)有返回值炬太,有參數(shù)無返回值,無參數(shù)有返回值驯耻,無參數(shù)無返回值.

block的聲明格式:

//無參數(shù)無返回值


無參無返回值


另外三種類型的block

有參數(shù)的block可以有多個參數(shù)亲族,參數(shù)之間使用“,”隔開可缚。

此時run程序會發(fā)現(xiàn)并不會有打印結(jié)果霎迫,必須要調(diào)用之后才能執(zhí)行block的代碼塊

block的調(diào)用


block的調(diào)用


打印結(jié)果

3.在block內(nèi)部可以訪問外部變量,默認(rèn)情況下不可以修改此外部變量的值:


此時修改age會報錯

如果想要在block內(nèi)部修改外部變量需要用__block修飾外部變量


輸出分別是24帘靡、42

4.利用類型定義定義block知给,這樣可以寫起來更簡單、方便


類型定義


使用

二.block使用場景

1.block屬性描姚,可以在類之間傳遞一段代碼并實現(xiàn)回調(diào)功能

新建一個Person類并聲明一個block類型的屬性


可以在Person的init方法中或者viewcontroller類中給這個block封裝一段代碼涩赢,然后調(diào)用。

本文在viewcontroller類中封裝轩勘,在Person中可以實現(xiàn)調(diào)用筒扒,就起到了類和類之間傳遞信息的作用


viewcontroller中封裝的代碼

2.block可以作方法的參數(shù),AFNetworking庫中的請求方法中一般都有block的參數(shù)赃阀,本文中將給Person類添加一個帶有block參數(shù)的方法


帶block參數(shù)的方法

然后在viewcontroller中就可以調(diào)用此方法霎肯,并將參數(shù)code傳遞到viewcontroller中擎颖,在viewcontroller中就可以利用code做需要做的事情,實現(xiàn)了事件和值的傳遞


調(diào)用方法并傳值

3.block可以作為方法的返回值

本文中將給Person類添加一個返回值為block類型的方法


返回值為block的方法


在viewcontroller中可以聲明一個block去接收這個返回值观游,也可以直接使用這個返回值搂捧,并傳遞參數(shù)給這個block


方法調(diào)用

三、對block的相關(guān)總結(jié)

1.block可以用來進(jìn)行事件或值的傳遞懂缕,是一種回調(diào)機制允跑,是一種蘋果推薦的類型,效率高搪柑。

2.使用block會引起循環(huán)引用聋丝,引起循環(huán)引用的根源是block和object的互相強引用、誰也釋放不了誰工碾,例如在使用ASI進(jìn)行網(wǎng)絡(luò)請求時弱睦,request強引用competionBlock,而在competionBlock中又使用了request渊额,對request也進(jìn)行了強引用况木,這樣就會造成循環(huán)引用。


retain cycle

解決循環(huán)引用的辦法是使用弱引用打斷retain cycle,使用__block修飾request


解決retain cycle

request被持有者釋放后旬迹。request 的retainCount變成0,request被dealloc火惊,request釋放持有的Block,導(dǎo)致Block的retainCount變成0奔垦,也被銷毀屹耐。這樣這兩個對象內(nèi)存都被回收。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末椿猎,一起剝皮案震驚了整個濱河市惶岭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鸵贬,老刑警劉巖俗他,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異阔逼,居然都是意外死亡兆衅,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門嗜浮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來羡亩,“玉大人薪捍,你說我怎么就攤上這事爷速。” “怎么了持搜?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵吉殃,是天一觀的道長辞居。 經(jīng)常有香客問我楷怒,道長,這世上最難降的妖魔是什么瓦灶? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任鸠删,我火速辦了婚禮,結(jié)果婚禮上贼陶,老公的妹妹穿的比我還像新娘刃泡。我一直安慰自己,他們只是感情好碉怔,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布烘贴。 她就那樣靜靜地躺著,像睡著了一般撮胧。 火紅的嫁衣襯著肌膚如雪桨踪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天趴樱,我揣著相機與錄音馒闷,去河邊找鬼酪捡。 笑死叁征,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的逛薇。 我是一名探鬼主播捺疼,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼永罚!你這毒婦竟也來了啤呼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤呢袱,失蹤者是張志新(化名)和其女友劉穎官扣,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體羞福,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡惕蹄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了治专。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卖陵。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖张峰,靈堂內(nèi)的尸體忽然破棺而出泪蔫,到底是詐尸還是另有隱情,我是刑警寧澤喘批,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布撩荣,位于F島的核電站铣揉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏餐曹。R本人自食惡果不足惜老速,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凸主。 院中可真熱鬧橘券,春花似錦、人聲如沸卿吐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嗡官。三九已至箭窜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間衍腥,已是汗流浹背磺樱。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留婆咸,地道東北人竹捉。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像尚骄,于是被迫代替她去往敵國和親块差。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理倔丈,服務(wù)發(fā)現(xiàn)憨闰,斷路器,智...
    卡卡羅2017閱讀 134,601評論 18 139
  • iOS代碼塊Block 概述 代碼塊Block是蘋果在iOS4開始引入的對C語言的擴展,用來實現(xiàn)匿名函數(shù)的特性,B...
    smile刺客閱讀 2,331評論 2 26
  • iOS網(wǎng)絡(luò)架構(gòu)討論梳理整理中需五。鹉动。。 其實如果沒有APIManager這一層是沒法使用delegate的宏邮,畢竟多個單...
    yhtang閱讀 5,165評論 1 23
  • 《Objective-C高級編程》這本書就講了三個東西:自動引用計數(shù)泽示、block、GCD蜀铲,偏向于從原理上對這些內(nèi)容...
    WeiHing閱讀 9,796評論 10 69
  • Block使用場景边琉,可以在兩個界面的傳值,也可以對代碼封裝作為參數(shù)的傳遞等记劝。用過GCD就知道Block的精妙之處变姨。...
    Coder_JMicheal閱讀 718評論 2 1