block的結(jié)構(gòu)體如下
Block是帶有自動變量的匿名函數(shù)黑竞;
有三種類型的Block:
_NSConcreteGlobalBlock
_NSConcreteStackBlock
_NSConcreteMallocBlock?????
Block截獲外面的自動變量:
全局變量不會被截獲袋毙;
沒有被__block修飾的int,block體中對這個(gè)變量的引用是值拷貝,在block中是不能被修改的;
通過__block修飾的int,block體中對這個(gè)變量的引用是指針拷貝除师,它會生成一個(gè)結(jié)構(gòu)體,復(fù)制這個(gè)變量的指針引用扔枫,從而達(dá)到可以修改變量的作用汛聚;
Block發(fā)生copy時(shí)機(jī):
block作為方法或函數(shù)的返回值時(shí),編譯器會自動完成copy操作短荐。
當(dāng)block賦值給通過strong或copy修飾的id或block類型的成員變量時(shí)倚舀。
當(dāng)?block?作為參數(shù)被傳入方法名帶有?usingBlock?的?Cocoa?Framework?方法或?GCD?的?API?時(shí)。