總結:前提條件
物件都是有引用計數且是被強指標指向的
[1]mrc,有autoreleasepool的情況下 |
所有建立出來的新物件都需要被釋放
|[2]mrc,沒有autoreleasepool的情況下
|--mrc不自動生成**,全手動
所有建立出來的新物件都需要被釋放
|[3]arc,有autoreleasepool的情況下
|不需要管理任何記憶體問題
|[4]mrc,沒有autoreleasepool的情況下
|--arc自動生成**,有池自動,無池手動
所有建立出來的新物件都需要被釋放
|只要是用alloc,retain,new(或者以new開頭的方法),copy(或者使用copy開頭的方法),multablecopy或者開頭的方法茶建立的物件,都需要用release或autorelease釋放
這幾個方法中都執行了retain操作,所以對應都需要release操作配對
然而所有的物件工廠方法都沒有執行retain操作,所以不需要release操作配對
總結原則一:
只要是執行了retain的操作,都需要有相應release操作與之對應
這個原則與是否arc或是否開啟autoreleasepool沒有關係,不要混淆
原則二autoreleasepool是和arc配合使用的,如果想不管理記憶體,二者缺一不可
不改寫alloc的話,
alloc之後,舊物件的引用計數是1,
init之後, 新物件的引用計數是1
改寫alloc的話(系統的幾個重要類都改寫了alloc),
alloc之後,舊物件的引用計數是-1,
init之後, 新物件的引用計數是2,在建立新物件的時候可能訪問到了其他地方引用的字串
課堂:retain只是計數器+1,還是原物件
copy是複製乙個全新物件,複製品的值不能修改
mutablecopy也是複製乙個全新的物件,複製品的值能修改
nsstring建立的物件不受mrc管理。因為nsstring可能直接指向常量了,這個常量字串可能在很多地方使用,所以引用計數不是1。
JVM自動記憶體管理
可 物件的判定方法 引用計數演算法 給物件新增乙個引用計數器,每乙個引用它的地方時,就 1,失效就 1,為0時候就是不能再被用了。缺陷 注意迴圈引用,就是你用我的,我用你的,叫做死鎖吧,引用計數器是1,無法 a.b b b.a a 現在主流的jvm沒有使用這個演算法。可達性分析演算法 通過一系列稱為...
PGA 記憶體自動管理
pga 記憶體自動管理 sql 工作區可以是自動的 全域性的管理。dba 只要設定引數 pga aggregate target 給乙個例項的 pga 記憶體指定總的大小。設定這個引數後,oracle 將它作為乙個總的全域性限制值,盡量使所有 oracle 服務程序的 pga 記憶體總數不超過這個值...
總結 記憶體管理
上下限暫存器 在cpu中設定上下限暫存器,用於分別存放作業在主存中的上限和下限位址 界位址暫存器 界位址暫存器存有程序的最大邏輯位址,若不越界,加上重定位暫存器 存有程序的起始實體地址 的值即為實體地址 編譯鏈結 裝入固定式分割槽 程式適應分割槽 可變式分割槽 分割槽適應程式 單一佇列分配方式 多佇...