weakself的一種寫(xiě)法

前言

在不久前看AFNetworking的源碼時(shí)候發(fā)現(xiàn)了這么一句:

// 不知道這行代碼的使用場(chǎng)景的同學(xué)你該去自習(xí)看看ARC的注意事項(xiàng)和Block的使用了

// AFNetworking的寫(xiě)法

__weak __typeof(&*self)weakSelf = self;

// 我之前一直這么寫(xiě)的

__weak __typeof(self) weakSelf = self;

// 或者這么寫(xiě)

__weak XxxViewController *weakSelf = self;

// 或者這么寫(xiě)

__weak id weakSelf = self;

當(dāng)時(shí)也沒(méi)注意為什么要寫(xiě)成&*這種樣子… 今天再想起來(lái), 搜了一圈, 終于讓我找到原因了…

正文

其實(shí)以上的4種寫(xiě)法都是對(duì)的

AFNetworking里面不寫(xiě)成以上這行代碼的原因是因?yàn)?typeof(self) 會(huì)被解析成 XxxViewController *const __strong (假如你的self是XxxViewController的話), 這樣的話就就會(huì)報(bào)錯(cuò)…(沒(méi)有老版本, 沒(méi)有驗(yàn)證, 不過(guò)看網(wǎng)上的結(jié)論應(yīng)該是這樣了)

不過(guò), 如果你寫(xiě)成了__typeof(self)也沒(méi)什么問(wèn)題… 那是因?yàn)樵贚LVM3.1之后已經(jīng)不會(huì)出現(xiàn)以上的情況了… ( via )

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容