BLOCK是什么集币?
蘋果推薦的類型考阱,效率高,在運行中保存代碼鞠苟。用來封裝和保存代碼羔砾,有點像函數(shù),BLOCK可以在任何時候執(zhí)行偶妖。
BOLCK和函數(shù)的相似性:
可以保存代碼
有返回值
有形參
調(diào)用方式一樣。
block類型:void(^)()
Block存儲
Block默認(rèn)存儲在棧中政溃,訪問了外界的對象趾访,不會對對象retain;如果對block進(jìn)行一次copy董虱,block就會存儲在堆中扼鞋,訪問了外界的對象申鱼,會對對象進(jìn)行retain操作。
Block的定義
- 注意:
- 如果block中沒有使用外部變量云头,默認(rèn)就是全局
- 如果block中使用了外部變量捐友,就是堆
- Block可以訪問局部變量,但是不能修改溃槐。
- ARC中匣砖,默認(rèn)局部變量是強(qiáng)引用
Block的格式
Block定義在函數(shù)或方法內(nèi)
int (^MyDear)(int, int) = ^(int a, int
b) {
return a+b;
};
```
定義了一個叫MyDear的blocks對象昏滴,它帶有兩個int參數(shù)猴鲫,返回int。等式右邊就是blocks的具體實現(xiàn)谣殊。
######block循環(huán)引用問題
- block盡量少使用self
- block盡量少使用下劃線(_)直接訪問成員屬性
- 要避免強(qiáng)引用到self的話拂共,用__weak把self重新引用一下就行