Object C程式設計記憶體管理

2021-06-26 10:24:28 字數 2380 閱讀 7962

記憶體管理的範圍:

任何繼承了

nsobject

的物件,對其他基本資料型別(

int、

char

、float

、double

、struct

、enum

等)無效

物件的基本結構

1.每個

oc物件都有自己的引用計數器,是乙個整數,表示

「物件被引用的次數

」,即有多少人正在使用這個

oc物件

2.每個

oc物件內部專門有

4個位元組的儲存空間來儲存引用計數器

引用計數器的作用

1.當使用

aloo

、new

或者copy

建立乙個新物件時,新物件的引用計數器預設就是12.

當乙個物件的引用計數器值為

0時,物件占用的記憶體就會被系統**。換句話說,如果物件的計數器不為

0,那麼在整個程式執行過程中,它占用的記憶體就不可能被**,除非整個程式已經退出

引用計數器的操作

1.給物件傳送一條

retian

訊息,可以使引用計數器值+1(

retian

方法返回物件本身)

2.給物件傳送一條

release

訊息,可以使引用計數器值

-13.

可以給物件傳送

retaincount

訊息獲得當前的引用計數器值

物件的銷毀

1.當乙個物件的引用計數器值為

0時,那麼它將被銷毀,其占用的記憶體被系統**

2.當乙個物件被銷毀時,系統會自動向物件傳送一條

dealloc

訊息3.

一般會重寫

dealloc

方法,在這裡釋放相關資源,

dealloc

就像物件的遺言

4.一旦重寫了

dealloc

方法,就必須呼叫【

supper dealloc

】,並且放在最後面呼叫

5.不要直接呼叫

dealloc

方法一旦物件被**了,它占用的記憶體就不再可用,堅持使用會導致程式崩潰(野指標錯誤)

記憶體管理原則(1

).只要還有人在用某個物件,那麼這個物件就不會被**(2

).只要你想用這個物件,就讓物件的計數器+1(

3).當你不再使用這個物件時,就讓物件的計數器

-1誰建立,誰

release

(1).

如果你通過

alloc

、new

或[mutable]copy

來建立乙個物件,那麼你必須呼叫

release

或autorelease

(2).

換句話說,不是你建立的,就不用你去【

autorelease】誰

retain

,誰release

只要你呼叫了

retain

,無論這個物件是如何生成的,你都要呼叫

release

【有始有終,有加就有減】

【曾經讓物件的計數器

+1,就必須在最後讓物件計數器-1】

@property

引數1.

控制set

方法的記憶體管理

retain

:release

舊值,retain

新值(用於

oc物件)

assign

:直接賦值,不做任何記憶體管理(預設,用於非

oc物件型別)

copy

:release

舊值,copy

新值(一般用於

nsstring *)2.

控制需不需生成

set方法

readwrite

:同時生成

set方法和

get方法(預設)

readonly

:只會生成

get方法

3.多執行緒管理

atomic

:效能低(預設)

nonatomic

:效能高

4.控制

set方法和

get方法的名稱

setter

:設定set

方法的名稱,一定有個冒號:

getter

:設定get

方法的名稱

概念1.殭屍物件:所占用的記憶體已經被**的物件,殭屍物件不能再使用

2.野指標:指向殭屍物件(不可用記憶體)的指標,給野指標傳送訊息會報錯(exc_bad_access )

3.空指標:沒有指向任何東西的指標(儲存的東西是nil、null、0),給野指標傳送訊息不會報錯

Object c記憶體管理

記憶體管理 物件的生命週期包括以下幾個時期 物件初始化 物件接收訊息和執行操作 物件被釋放 判斷乙個物件是否結束,用到引用計數器 引用計數器的基本概念 1 每個人物件有乙個整數值,這個整數值與物件本身關聯,稱為引用計數器 2 當某些地方需要使用這個物件時,可以將引用計數器加1,表示使用這個這個物件 ...

Object C 記憶體管理

object c 記憶體管理 一 基本概念 1.iphone系統中的objective c的記憶體管理機制是比較靈活的,即可以拿來像c c 一樣用,也可以加個autoreleasepool讓它公升級為半自動化的記憶體管理語言 2.引用計數是例項物件的記憶體 唯一參考 引用計數 retaincount...

Object C中管理記憶體

object c之中採用一種保留記錄的方式記錄我們所建立的所有的物件,並且,當該計數減少為0的時候,object c自動收回分配給乙個物件的記憶體。text text1 text alloc init text text2 text alloc init 每乙個物件的計數都為1,我們可以通過reta...