block的原理是怎樣的桩引?本質是什么山上?
- 本質就是一個封裝了函數(shù)調用
impl.FuncPtr
以及函數(shù)調用環(huán)境函數(shù)需要的參數(shù)
的OC對象impl.isa
__block
的作用是什么?有什么使用注意點缭召?
被
__block
修飾的變量會被包裝成另一種對象奈籽,可以用于解決block
內部無法修改auto
變量值的問題市咽,先通過這個對象再通過__forwarding
指針就可以訪問到那個變量進行修改注意內存管理的問題垂涯,如果修飾的是對象烁焙,
block
拷貝到堆上時,在ARC環(huán)境下會對對象做retain
操作耕赘,而MRC
環(huán)境下則不會骄蝇。
block的屬性修飾詞為什么是copy?使用block有哪些使用注意鞠苟?
- block一旦沒有進行copy操作就不會在堆上,拷貝在堆上是為了控制block的生命周期,進行內存管理
- 使用注意:循環(huán)引用
block在修改NSMutableArray当娱,需不需要添加__block吃既?
- 不需要,
NSMutableArray
有相應的api
來修改數(shù)組內容跨细,這是直接使用這個變量鹦倚,而不是修改這個變量,所以不需要__block
修飾冀惭, -
__block
能不加就盡量不加震叙,加了數(shù)據(jù)結構就變得復雜,會生成一個額外的結構體