溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

weakself的一種寫法

發(fā)布時(shí)間:2020-07-02 17:38:04 來(lái)源:網(wǎng)絡(luò) 閱讀:719 作者:Im劉亞芳 欄目:開發(fā)技術(shù)

前言

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

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

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

正文

其實(shí)以上的4種寫法都是對(duì)的 
AFNetworking里面不寫成以上這行代碼的原因是因?yàn)?nbsp;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ò), 如果你寫成了__typeof(self)也沒(méi)什么問(wèn)題… 那是因?yàn)樵贚LVM3.1之后已經(jīng)不會(huì)出現(xiàn)以上的情況了… ( via )

總結(jié)

  • TODO: ARC的文檔值得仔細(xì)看看 http://clang.llvm.org/docs/AutomaticReferenceCounting.html

  • 之前推薦的 Multithreading and Memory Management for iOS and OS X 是一本好書


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI