偶得前言
本篇文章中我們主要談?wù)凬STimer\CADisplayLink在使用過程中牽扯到內(nèi)存泄露的相關(guān)問題及解決思路(文章末尾會附上Demo),有時候我們在不知情的情況容易入坑,最關(guān)鍵你還不知道自己掉坑了,閑話不多說,讓我們開始進入正題。
NSRunLoop與定時器
我們先來回顧一下NSRunLoop對NSTimer\CADisplayLink的影響。(為了方便,以下統(tǒng)稱定時器)
大家都知道定時器的運行需要結(jié)合一個NSRunLoop(有疑惑的同學(xué)可以查看Xcode Document,此處不細說),同時NSRunLoop對該定時器會有一個強引用,這也是為什么我們不對NSRunLoop中的定時器進行強引的原因(如:self.timer = timer, 此代碼可省略)。
- invalidate的作用
由于NSRunLoop對定時器有著牽引,那么問題就來了,那么定時器怎樣才能被釋放掉呢(先不考慮使用removeFromRunLoop:),此時- invalidate函數(shù)的作用就來了,我們來看看官方就此函數(shù)的介紹:
Removes the object from all runloop modes (releasing the receiver if it has been implicitly retained) and releases the 'target' object.
據(jù)官方介紹可知,- invalidate做了兩件事,首先是把本身(定時器)從NSRunLoop中移除,然后就是釋放對‘target’對象的強引用。從而解決定時器帶來的內(nèi)存泄露問題。
內(nèi)存泄露在哪?
看到這里我們可能會有點懵逼,先上一個圖(為了方便講解,途中箭頭指向誰就代表強引誰):
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26
![學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負責(zé)任的教育,學(xué)習(xí)改變命運,軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)](http://m.roadsoft.com.cn/attached/image/templet/e87d53eb-cf7a-4689-887a-1cd260f416a5.jpg)