內(nèi)存泄露和循環(huán)引用問題

內(nèi)存泄露和循環(huán)引用問題

開發(fā)項目時你怎么檢查內(nèi)存泄漏

  • 靜態(tài)分析analyze
  • instruments里有一個leak工具可以動態(tài)分析
  • 如果block中多次使用weakSelf的話,可以在block中先使用strongSelf,防止block執(zhí)行時weakself被自動釋放
  • 對于非ARC,將weak改用為block即可

常見的出現(xiàn)循環(huán)引用的場景有哪些

  • 定時器(NSTimer):NSTimer經(jīng)常會被作為某個類的成員變量,而NSTimer在初始化時又要指定self為target,容易造成循環(huán)引用。另外,若timer一直處于validate的狀態(tài),則其引用計數(shù)將始終大于0,因此在NSTimer使用完畢之后,應(yīng)該先調(diào)用invalidate方法,而且在定義NSTimer屬性的時候要使用weak修飾符。
  • block:block在copy時會對block內(nèi)部用到的對象進(jìn)行強(qiáng)引用(ARC中訪問到外部變量會把變量copy到堆中)或者引用計數(shù)+1(非ARC)。一般表現(xiàn)為,某個類將block作為自己的屬性變量,然后該類在block的方法體里面又使用了該類本身。解決辦法:
            __weak __typeof__ (self) wself = self;
  • 代理:規(guī)避代理循環(huán)引用的方法:聲明delegate屬性的時候用assign(MRC)或weak(ARC)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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