iOS Block

Block介紹

  • block 本質(zhì)上也是一個(gè) OC 對(duì)象,它內(nèi)部也有個(gè) isa 指針
  • block 是封裝了函數(shù)調(diào)用以及函數(shù)調(diào)用環(huán)境的 OC 對(duì)象
  • block 是封裝函數(shù)及其上下文的 OC 對(duì)象

Block的三種類(lèi)型

  • _NSConcreteStackBlock:全局?jǐn)?shù)據(jù)區(qū)的 Block 對(duì)象,在棧上創(chuàng)建。
  • _NSConcreteMallocBlock:在堆上創(chuàng)建的 Block 對(duì)象
  • _NSConcreteGlobalBlock:全局?jǐn)?shù)據(jù)區(qū)的 Block 對(duì)象

對(duì)三種Block對(duì)象分別進(jìn)行copy的結(jié)果為

  • __NSGlobalBlock __ 調(diào)用 copy 操作后,什么也不做
  • __NSMallocBlock __ 調(diào)用 copy 操作后,復(fù)制效果是:引用計(jì)數(shù)增加;副本存儲(chǔ)位置是堆
  • _NSStackBlock __ 調(diào)用 copy 操作后,復(fù)制效果是:從棧復(fù)制到堆;副本存儲(chǔ)位置是堆

Block的類(lèi)型如何界定?

NSGlobalBlock界定方法

  • 不捕獲全局變量(包括全局靜態(tài)變量)
  • 沒(méi)有捕獲變量或者捕獲的只有局部靜態(tài)變量
  • 以指針形式截獲局部靜態(tài)變量

NSStackBlock
訪問(wèn)了外部變量,但沒(méi)有強(qiáng)引用指向這個(gè)block

NSMallocBlock
訪問(wèn)了外部變量而且有強(qiáng)引用指向該block(或者作為函數(shù)返回值)就會(huì)自動(dòng)將__NSStackBlock類(lèi)型copy到堆上

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. block的本質(zhì) 我們通過(guò)一個(gè)簡(jiǎn)單的demo,解析一下block的底層原理.定義一個(gè)簡(jiǎn)單的block并調(diào)用:...
    switer_iOS閱讀 396評(píng)論 0 0
  • 第一部分:Block本質(zhì) Q:什么是Block,Block的本質(zhì)是什么? block本質(zhì)上也是一個(gè)OC對(duì)象,它內(nèi)部...
    sheldon_龍閱讀 609評(píng)論 0 0
  • 前言 Blocks是C語(yǔ)言的擴(kuò)充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了這...
    小人不才閱讀 3,869評(píng)論 0 23
  • 一 Block的實(shí)現(xiàn) 1. 在main函數(shù)中聲明、實(shí)現(xiàn)并調(diào)用一個(gè)block 2. 然后我們通過(guò)clang命令將ma...
    TIGER_XXXX閱讀 578評(píng)論 0 0
  • block本質(zhì)block是封裝了函數(shù)調(diào)用以及函數(shù)調(diào)用環(huán)境的OC對(duì)象(它內(nèi)部也有個(gè)isa指針) 函數(shù)調(diào)用環(huán)境:函數(shù)調(diào)...
    陳盼同學(xué)閱讀 398評(píng)論 0 0

友情鏈接更多精彩內(nèi)容