unowned 和 weak 的小事兒

自從接觸了swift 之后,Closure 算是用的最多的東西了,為了避免循環(huán)引用,一直喜歡在Closure里面 使用 [unowned self] in這種方式,來避免這個問題。

然而

當(dāng)頁面存在網(wǎng)絡(luò)請求的時候!
在這里,我使用了Alamofire 和 MJRefresh 來請求數(shù)據(jù)和控制頁面刷新,且,tableView 被我搶解包了(這里這個tableView是必然存在的。。。頁面開始我就創(chuàng)建了它)

然后問題來了:當(dāng)網(wǎng)絡(luò)情況差的時候,頁面被銷毀,但是網(wǎng)絡(luò)請求并沒有被取消,然后網(wǎng)絡(luò)數(shù)據(jù)下來之后,繼續(xù)執(zhí)行了Closure,此時程序崩潰,因為self已經(jīng)不在了。

參考了Swift:Weak 和 Unowned之后,

解決方案:

[unowned self] 改為了 [weak self] 避免強制解包

不靠譜的分析

大概是unowned 捕獲的對象不是Option 類型的對象,unowned 必須要求對象必須提前創(chuàng)建, 并和Closure 擁有相同的生命周期才可以有效的避免強制解包!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 內(nèi)存管理在iOS開發(fā)中很重要,在iOS 5之前,開發(fā)者需要使用MRC(Manual Reference Count...
    flionel閱讀 3,750評論 3 15
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,188評論 4 61
  • 人生好比閱讀。除卻少年時看的言情玄幻類的青春文學(xué)來看,我們閱讀視線往往先被心靈雞湯吸引,而后逐漸接觸現(xiàn)當(dāng)代文學(xué)作品...
    CaelynGu閱讀 324評論 0 3
  • 【按】這兩天從百度中搜出一篇朋友寫的舊文,生動記錄了2014年夏天的百利生。回憶下走過的路,好溫暖。 作者:馬小東...
    一白釀酒閱讀 402評論 0 2
  • java設(shè)計模式--建造者模式 建造者模式定義 建造者模式:是將復(fù)雜對象的構(gòu)建與表示進行分離,使同樣的構(gòu)建過程會有...
    shuaidong閱讀 348評論 0 0