目錄:
1內(nèi)存布局
2內(nèi)存管理方案
2.1Tagged Pointer
2.2NONPOINTER_ISA
2.3散列表(side table )
3數(shù)據(jù)結(jié)構
3.1自旋鎖
3.2引用計數(shù)表
3.3弱引用表
4引用計數(shù)
5ARC & MRC
5.1MRC手動
5.2ARC自動
5.3iOS內(nèi)存的代碼實現(xiàn)
5.31alloc
5.32retain
5.33release
5.34retainCount
5.35autorelease
5.36dealloc
6弱引用
7自動釋放池
8常見的容易造成泄漏的點
8.1循環(huán)引用
8.2使用單例的的一些情況
8.3NSTimer
8.4NSURLSession
8.5非OC對象的內(nèi)存問題
8.6其他泄漏情況
8.7ARC內(nèi)存泄露的檢測
8.71使用Xcode自帶工具Instrument
8.72在對象dealloc中進行打印
01內(nèi)存布局
堆棻衲洌空間分配
棧(操作系統(tǒng)):由操作系統(tǒng)自動分配釋放 徽级,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構中的棧划址。 堆(操作系統(tǒng)): 一般由程序員分配釋放翎嫡, 若程序員不釋放,程序結(jié)束時可能由OS回收镐躲,分配方式倒是類似于鏈表改衩。
堆棧緩存方式
棧使用的是一級緩存岖常, 他們通常都是被調(diào)用時處于存儲空間中,調(diào)用完畢立即釋放葫督。 堆則是存放在二級緩存中竭鞍,生命周期由虛擬機的垃圾回收算法來決定(并不是一旦成為孤兒對象就能被回收)。所以調(diào)用這些對象的速度要相對來得低一些橄镜。
內(nèi)存中的棧區(qū)處于相對較高的地址以地址的增長方向為上的話偎快,棧地址是向下增長的
。
棧中分配局部變量空間洽胶,堆區(qū)是向上增長的用于分配程序員申請的內(nèi)存空間晒夹。另外還有靜態(tài)區(qū)是分配靜態(tài)變量,全局變量空間的姊氓;只讀區(qū)是分配常量和程序代碼空間的丐怯;以及其他一些分區(qū)。
2內(nèi)存管理方案
2.1Tagged Pointer
2.2NONPOINTER_ISA(非指針型isa)
2.3散列表(side table )
3數(shù)據(jù)結(jié)構
3.1自旋鎖
3.2引用計數(shù)表
3.3弱引用表
4 引用計數(shù)
5ARC & MRC
5.1 MRC(MannulReference Counting)
需要程序員自己管理一個對象的引用計數(shù)翔横。
5.2 ARC(Automatic Reference Counting)
ARC 是蘋果引入的一種自動內(nèi)存管理機制读跷,會根據(jù)引用計數(shù)自動監(jiān)視對象的生存周期,實現(xiàn)方式是在編譯時期自動在已有代碼中插入合適的內(nèi)存管理代碼以及在 Runtime 做一些優(yōu)化禾唁。
http://www.reibang.com/p/3cd8b3caad80
5.3 iOS內(nèi)存的代碼實現(xiàn)
5.31alloc
5.32retain
5.33release
5.34retainCount
5.35autorelease
5.36dealloc
6 弱引用
7 autoreleasepool 自動釋放池
8常見的容易造成泄漏的點
8.1循環(huán)引用
8.2使用單例的的一些情況
8.3NSTimer
8.4NSURLSession
8.5非OC對象的內(nèi)存問題
8.6其他泄漏情況
8.7ARC內(nèi)存泄露的檢測
8.71使用Xcode自帶工具Instrument
8.72在對象dealloc中進行打印
參考文章:
http://blog.devtang.com/2016/07/30/ios-memory-management/
https://juejin.im/post/5abe543bf265da23784064dd
http://www.reibang.com/p/5d2163640e26
https://juejin.im/post/5c4821fdf265da613b70159d
https://juejin.im/post/5c0744f6e51d45598b76f481
https://juejin.im/post/58c9fff8128fe1006c7be387
https://juejin.im/post/5ce36300f265da1b8b2b32b6?utm_source=gold_browser_extension#heading-14
iOS內(nèi)存管理布局及管理方案-理論篇