(轉(zhuǎn)載:??http://www.reibang.com/p/d0ef07cbd430)
//聯(lián)系人:石虎?QQ:1224614774?昵稱:嗡嘛呢叭咪哄
一毫胜、概念
1.防止如block的循環(huán)引用時梧奢,會使用__weak關(guān)鍵字做如下定義:
? __weak?typeof(self) weakSelf = self;
? 使用:? [weakSelf addSubViews];
2.寫成宏的方法:
? #define WeakSelf ? ? __weak typeof(self) weakSelf = self;
使用:? [WeakSelf?addSubViews];
3.宏的優(yōu)化,讓部分的變量也可以使用weak
? #define WeakObj(o) ? ? __weak typeof(o) o##Weak = o;
使用:?WeakObj(self)
? [selfWeak addSubViews];
4.利用了@autoreleasepool{}這個系統(tǒng)的關(guān)鍵字來實現(xiàn),添加了@符號在前面,看起來更原生
? #define WeakObj(o) autoreleasepool{} __weak typeof(o) o##Weak = o;
? 使用:
? @WeakObj(self)
? [selfWeak addSubViews];
5.利用了try{}@finally{}這個系統(tǒng)的關(guān)鍵字來實現(xiàn),添加了@符號在前面,看起來更原生
? #define WeakObj(o) try{}@finally{} __weak typeof(o) o##Weak = o;
? 使用:
? @WeakObj(self)
? [selfWeak addSubViews];
注意:
? 1.這部分空的@try或者空的@autoreleasepool會在編譯時被優(yōu)化掉兵罢,不必?fù)?dān)心性能問題。
? 2.實際開發(fā)中常用3條和5條的定義方式