weakself的一種寫法

前言

在不久前看AFNetworking的源碼時候發現了這麼一句:

// 不知道這行代碼的使用場景的同學你該去自習看看ARC的注意事項和Block的使用了
// AFNetworking的寫法__weak __typeof(&*self)weakSelf = self;
// 我之前一直這麼寫的__weak __typeof(self) weakSelf = self;
// 或者這麼寫__weak XxxViewController *weakSelf = self;
// 或者這麼寫__weak id weakSelf = self;

當時也沒注意爲什麼要寫成&*這種樣子… 今天再想起來, 搜了一圈, 終於讓我找到原因了…

正文

其實以上的4種寫法都是對的 
AFNetworking裏面不寫成以上這行代碼的原因是因爲 typeof(self) 會被解析成 XxxViewController *const __strong (假如你的self是XxxViewController的話), 這樣的話就就會報錯…(沒有老版本, 沒有驗證, 不過看網上的結論應該是這樣了)

不過, 如果你寫成了__typeof(self)也沒什麼問題… 那是因爲在LLVM3.1之後已經不會出現以上的情況了… ( via )

總結


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章