Block初步接觸

OC 日常筆記碎片知識

Block基本概念
Block是iOS中一種比較特殊的數(shù)據(jù)類型.

  • 蘋果推薦使用的數(shù)據(jù)類型,應(yīng)用場景廣泛.
  • 例如:動畫,多線程,集合遍歷,網(wǎng)絡(luò)請求回調(diào).
  • Block的作用是用來保存某一段代碼,可以在恰當(dāng)時機(jī)取出來調(diào)用,功能類似于函數(shù)和方法.

Block的格式

  • 如何定義?

返回值類型 (^blcok變量名)(形參列表) = ^(形參列表) {};

*回顧C(jī)函數(shù)指針.

打印一朵玫瑰.png

封裝方法.

方便打印.png
打印結(jié)果.png

函數(shù)指針的使用

函數(shù)指針.png

3個參數(shù)理解

參數(shù)理解.png

無參數(shù)無返回值的Block

初認(rèn)識Block.png

C函數(shù)如何遍歷輸出?

封裝.png

函數(shù)指針如何保存?

簡明知意.png

有參數(shù)沒有返回值Block

Block.png

C函數(shù)是怎么定義有參數(shù),有返回值的?

簡明知意.png

有返回值有參數(shù)Block

~(≧▽≦)/~啦啦啦.png

無返回值,有參數(shù)Block.

= =!.png

*注意點(diǎn): 如果Block沒有參數(shù),那么^后面的( )可以省略.


Block與Typedef

  • 定義簡單加減法函數(shù)
+ -.png

查看輸出結(jié)果

結(jié)果.png

發(fā)現(xiàn)有相似之處,如何處理? Typedef利用別名定義變量

Typedef.png

Typedef在Blcok中的使用

Typede_user.png

*總結(jié): Typedef很好減少了代碼重復(fù),利用別名定義變量,更好代碼閱讀性.


Block的應(yīng)用場景
當(dāng)發(fā)現(xiàn)重復(fù)代碼時,可考慮把代碼封裝進(jìn)一個方法里,把不一樣的代碼利用Block傳入即可.

代碼復(fù)用.png
寫B(tài)lock.png
結(jié)構(gòu)明了.png

*對于Block的使用場景還處于初步階段,暫時還體驗(yàn)不到好處,但通過觀察發(fā)現(xiàn)由外界傳入?yún)?shù)決定事件,完全符合封裝目的.


Block注意點(diǎn)與本質(zhì)

block可以訪問外界變量嗎?

訪問外界.png

如果在block里定義同名變量,block會選擇哪個?

就近原則.png

block塊中能修改外面的變量嗎?

不能修改外部變量.png

原因是什么?

原因.png

在外界修改block使用的變量,會有影響嗎?

外部修改變量.png

如何修改里面的值?對外界的變量會有影響嗎?

會有影響.png

當(dāng)添加__blcok,那么打印內(nèi)存地址會一樣嗎?

內(nèi)存地址.png

*思考加了__block導(dǎo)致打印內(nèi)存地址不一樣呢?

  • 首先生成把mian.m文件生成C語言
  • 找到目標(biāo)
生成clang.gif
  • 查看
look.png
  • 重新生成一份
指針傳遞.png

Block在MRC中的內(nèi)存管理

  • 首先生成person類
準(zhǔn)備工作.png
person對象.png
銷毀.png
沒銷毀.png
  • 如何在MRC中防止內(nèi)存泄漏?
__block.png
  • 經(jīng)典面試題: block是存儲在堆中還是棧中
    1. 默認(rèn)情況下block存儲在棧中,如果對block進(jìn)行一個copy操作,block會轉(zhuǎn)移到堆中.
      -2.如果block在棧中, block中訪問了外界的對象,那么不會對對象進(jìn)行retain操作
      -3.但是如果block在堆中,block中訪問了外界的對象,那么會對外界的對象進(jìn)行一次retain

**總結(jié): 如果在block中訪問了外界的對象,一定要給對象加上__block,只要加上了,哪怕block在堆中,也不會對外界的對象進(jìn)行retain.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蔫耽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,331評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荧关,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)岭辣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來甸饱,“玉大人沦童,你說我怎么就攤上這事√净埃” “怎么了偷遗?”我有些...
    開封第一講書人閱讀 167,755評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長驼壶。 經(jīng)常有香客問我鹦肿,道長,這世上最難降的妖魔是什么辅柴? 我笑而不...
    開封第一講書人閱讀 59,528評論 1 296
  • 正文 為了忘掉前任箩溃,我火速辦了婚禮瞭吃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘涣旨。我一直安慰自己歪架,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,526評論 6 397
  • 文/花漫 我一把揭開白布霹陡。 她就那樣靜靜地躺著和蚪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪烹棉。 梳的紋絲不亂的頭發(fā)上攒霹,一...
    開封第一講書人閱讀 52,166評論 1 308
  • 那天,我揣著相機(jī)與錄音浆洗,去河邊找鬼催束。 笑死,一個胖子當(dāng)著我的面吹牛伏社,可吹牛的內(nèi)容都是我干的抠刺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,768評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼摘昌,長吁一口氣:“原來是場噩夢啊……” “哼速妖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起聪黎,我...
    開封第一講書人閱讀 39,664評論 0 276
  • 序言:老撾萬榮一對情侶失蹤罕容,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后稿饰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體杀赢,經(jīng)...
    沈念sama閱讀 46,205評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,290評論 3 340
  • 正文 我和宋清朗相戀三年湘纵,在試婚紗的時候發(fā)現(xiàn)自己被綠了脂崔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,435評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡梧喷,死狀恐怖砌左,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情铺敌,我是刑警寧澤汇歹,帶...
    沈念sama閱讀 36,126評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站偿凭,受9級特大地震影響产弹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,804評論 3 333
  • 文/蒙蒙 一痰哨、第九天 我趴在偏房一處隱蔽的房頂上張望胶果。 院中可真熱鬧,春花似錦斤斧、人聲如沸早抠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蕊连。三九已至,卻和暖如春游昼,著一層夾襖步出監(jiān)牢的瞬間甘苍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工烘豌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留载庭,地道東北人。 一個月前我還...
    沈念sama閱讀 48,818評論 3 376
  • 正文 我出身青樓扇谣,卻偏偏與公主長得像昧捷,于是被迫代替她去往敵國和親闲昭。 傳聞我的和親對象是個殘疾皇子罐寨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,442評論 2 359

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

  • 前言 Blocks是C語言的擴(kuò)充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了這...
    小人不才閱讀 3,772評論 0 23
  • 轉(zhuǎn)自李峰峰博客 一序矩、概述 閉包 = 一個函數(shù)「或指向函數(shù)的指針」+ 該函數(shù)執(zhí)行的外部的上下文變量「也就是自由變量」...
    Joshua520閱讀 992評論 0 0
  • 原文地址:Objective-C中的Block 1.相關(guān)概念 在這篇筆記開始之前鸯绿,我們需要對以下概念有所了解。 1...
    默默_David閱讀 411評論 0 1
  • 目錄 Block概述 Block定義方式 Block保存代碼 Block傳值 Block對外部變量的傳遞 Bloc...
    子斌閱讀 1,402評論 2 7
  • Block使用場景簸淀,可以在兩個界面的傳值瓶蝴,也可以對代碼封裝作為參數(shù)的傳遞等。用過GCD就知道Block的精妙之處租幕。...
    Coder_JMicheal閱讀 725評論 2 1