您好,登錄后才能下訂單哦!
在不久前看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 )
TODO: ARC的文檔值得仔細(xì)看看 http://clang.llvm.org/docs/AutomaticReferenceCounting.html
之前推薦的 Multithreading and Memory Management for iOS and OS X 是一本好書
免責(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)容。