image.png
以上block執(zhí)行后打印結(jié)果為10 因?yàn)閎lock結(jié)構(gòu)體內(nèi)部有個(gè)新的age被賦值為10 ,下面的age怎么改都不會(huì)影響到里面的age的值
block的變量捕獲
針對(duì)上述的局部變量age 就是auto變量 就會(huì)捕獲到block內(nèi)部,但是是值傳遞
static變量
由上圖可知 對(duì)于使用static修飾的局部變量被捕獲到block內(nèi)部后是傳遞的地址指針,所以后面的height更改為20后打印的結(jié)果就是20
image.png
這個(gè)打印后都是20 因?yàn)槿肿兞坎粫?huì)捕獲,直接拿到最新值就可以
總結(jié):局部變量為什么需要捕獲,因?yàn)樾枰绾瘮?shù)進(jìn)行賦值,需要在內(nèi)部進(jìn)行存儲(chǔ),而全局變量則不需要,換言之全局變量在哪個(gè)函數(shù)中都可以獲取到
image.png
對(duì)象也可以捕獲到,因?yàn)閟elf是個(gè)局部變量,在test函數(shù)中有兩個(gè)隱藏參數(shù),一個(gè)是self,一個(gè)是_cmd
image.png
對(duì)于_name來說,因?yàn)閚ame為MJPerson的屬性,其調(diào)用時(shí)self->_name進(jìn)行調(diào)用,所以block內(nèi)部會(huì)捕獲self,并通過self進(jìn)行獲取