整理一下自己學(xué)到的知識(shí)嗅战,方便以后查看
不手動(dòng)指定autoreleasepool的前提下孔飒,一個(gè)autorealese對(duì)象在什么時(shí)刻釋放选调?(比如在一個(gè)vc的viewDidLoad中創(chuàng)建)
分兩種情況:手動(dòng)干預(yù)釋放時(shí)機(jī)顷编、系統(tǒng)自動(dòng)去釋放。
手動(dòng)干預(yù)釋放時(shí)機(jī)--指定autoreleasepool 就是所謂的:當(dāng)前作用域大括號(hào)結(jié)束時(shí)釋放碱璃。
系統(tǒng)自動(dòng)去釋放--不手動(dòng)指定autoreleasepool
Autorelease對(duì)象會(huì)在當(dāng)前的 runloop 迭代結(jié)束時(shí)釋放弄痹。
如果在一個(gè)vc的viewDidLoad中創(chuàng)建一個(gè) Autorelease對(duì)象,那么該對(duì)象會(huì)在 viewDidAppear 方法執(zhí)行前就被銷(xiāo)毀了嵌器。
蘋(píng)果是如何實(shí)現(xiàn)autoreleasepool的?
autoreleasepool以一個(gè)隊(duì)列數(shù)組的形式實(shí)現(xiàn),主要通過(guò)下列三個(gè)函數(shù)完成.
objc_autoreleasepoolPush
objc_autoreleasepoolPop
objc_aurorelease
看函數(shù)名就可以知道谐丢,對(duì)autorelease分別執(zhí)行push爽航,和pop操作。銷(xiāo)毀對(duì)象時(shí)執(zhí)行release操作乾忱。