一、自動釋放池
自動釋放池,任何標記為自動釋放並因此新增到池中的物件,將在池本身被釋放的同時也自動釋放,程式可以有多個自動釋放池,它們還可以是巢狀的。
如果程式在執行時將產生大量的臨時物件,就可能需要在程式中建立多重自動釋放池。例如:
在執行此段**的時候會有大量的臨時物件產生,如果就這樣一直迴圈下去,就會存在記憶體洩露的問題(記憶體洩露是不再使用的記憶體沒有得到釋放,致使我們不能再對次塊記憶體進行使用)。因為這些臨時物件會在不斷的分配空間直到執行此迴圈操作的runloop的本次迴圈結束才會去釋放。所以我們只需要稍微做一些修改,新增乙個自動釋放池,每次迴圈完了就會去釋放在池中的自動釋放的物件for(
inti =0
;i <
1000000;i
++)
自動釋放池並不包含實際的物件本身,僅僅是對池釋放的時候要釋放的物件的引用,通過像當前的自動釋放池傳送一條autorelease訊息,就可以將乙個物件新增到其中,以便以後釋放。for(
inti =0
;i <
1000000;i
++)}
二、引用計數
記憶體中常量字串的空間分配與其他物件不同,他們沒有引用計數的機制,包括使用常量字串初始化的不可變字串物件也是沒有引用計數機制的。
在宣告為retain的屬性setter裡面要注意:
-和(void
)setnumtest
:(nsnumber
*)numtest1
-這兩者之間是有區別的。比如引數和屬性指向的是同乙個位址,那麼下面這種就會去對已經釋放掉的記憶體塊進行操作。(void
)setnumtest
:(nsnumber
*)numtest1
其實
-這樣書寫會更保險一點,個人覺得如果先判斷一下上面兩種寫法就是一樣的了。(void
)setnumtest
:(nsnumber
*)numtest1
}
ios記憶體管理總結
1.在init函式中必須呼叫 super init 函式dealloc中必須呼叫 super dealloc 2.呼叫以 alloc new copy mutablecopy 開頭函式的生成的物件,必須release 3.物件呼叫retain,必須release 4.物件可以呼叫autoreleas...
iOS記憶體管理小總結
1 引用計數機制通過可以遞增遞減的計數器來管理 記憶體。物件建立好之後,其保留計數至少為1。若保留計數為正,則物件繼續存活。當保留計數降為0時,物件就被銷毀了 2 在物件生命週期中,其餘物件通過引用來保留或者釋放此物件。保留與釋放操作分別會遞增及遞減保留計數 3 使用arc一定要記住,引用計數實際上...
iOS記憶體管理的問題總結
這幾個關鍵字在宣告變數的時候經常遇到,那麼它們有什麼區別,應該如何選擇呢?這些關鍵字的主要區別,在於對記憶體的管理。首先,要介紹一下objective c的記憶體管理機制。objective c對記憶體的管理,以一種叫做 retain count 的方式來管理。對於乙個物件,當它被new alloc...