ios開發 OC記憶體管理的學習

2021-06-29 04:14:41 字數 3230 閱讀 5959

今天我學習了oc中重點的內容,記憶體管理,由於內容較多,需要慢慢消化,下面是具體學習內容:

記憶體管理的學習:1.

基本實現方法

:1)retain

:計數器

+1,會返回物件本身

2)release

:計數器

-1,沒有返回值

3)retaincount

:獲取當前的計數器

4)dealloc:

* 當乙個物件要被**的時候,就會呼叫

* 一定要呼叫

[super dealloc]

,這句呼叫要放在最後面

2.一些基本概念:1)

殭屍物件

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

2)野指標

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

exc_bad_access)3)

空指標:沒有指向任何東西的指標(儲存的東西是

nil、

null、0

),給空指標傳送訊息不會報錯

3.舉例

://

當乙個person

物件被**的時候,就會自動呼叫這個方法

- (void)dealloc

4.多個物件之間的記憶體管理:原則

:誰alloc,

誰release;

誰retain,

誰release.

5.set

方法的記憶體管理

:1>

基本資料型別:直接複製

- (void)setage:(int)age

2> oc

物件型別

- (void)setcar:(car *)car

}3.dealloc

方法的**規範

1>

一定要[super dealloc]

,而且放到最後面

2>

對self

(當前)所擁有的其他物件做一次

release

- (void)dealloc

6.@property引數:

宣告中:

@property (retain) book *book;

實現中:

- (void)setbook:(book *)book

}對應的

dealloc

中的實現

:- (void)dealloc 7.

迴圈引用

:1.@class

的作用:僅僅告訴編譯器,某個名稱是乙個類

@class person; //

僅僅告訴編譯器,

person

是乙個類

2.開發中引用乙個類的規範

1> 在.h

檔案中用

@class

來宣告類

2> 在.m

檔案中用

#import

來包含類的所有東西

3.兩端迴圈引用解決方案

1>

一端用retain

2>

一端用assign

8.autorelease

的用法:

首先什麼是自動釋放池

:1>

在ios

程式執行過程中,會建立無數個池子。這些池子都是以棧結構存在(先進後出)

2>

當乙個物件呼叫

autorelease

方法時,會將這個物件放到棧頂的釋放池例如:

void test()

// }

結束代表銷毀釋放池}

其次:1.autorelease

的基本用法

1>

會將物件放到乙個自動釋放池中

2>

當自動釋放池被銷毀時,會對池子裡面的所有物件做一次

release

操作3>

會返回物件本身

4>

呼叫完autorelease

方法後,物件的計數器不變

2.autorelease

的好處1>

不用再關心物件釋放的時間

2>

不用再關心什麼時候呼叫

release

3.autorelease

的使用注意

1>

占用記憶體較大的物件不要隨便使用

autorelease

2>

占用記憶體較小的物件使用

autorelease

,沒有太大影響

總結:首先要了解oc中記憶體管理是如何實現的,熟悉autorelease的運用,下面引用mj老師的話作為今天的結束語

1.set

方法記憶體管理相關的引數

* retain : release

舊值,retain

新值(適用於

oc物件型別)

* assign :

直接賦值(預設,適用於非

oc物件型別)

* copy   : release

舊值,copy

新值2.

是否要生成

set方法

* readwrite :

同時生成

setter

和getter

的宣告、實現(預設

)* readonly  :

只會生成

getter

的宣告、實現

3.多執行緒管理

* nonatomic :

效能高(

一般就用這個

)* atomic    :

效能低(預設)

4.setter

和getter

方法的名稱

* setter :

決定了set

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

:* getter :

決定了get

方法的名稱

(一般用在

bool型別)

5.規範建立物件的格式

:建立物件

:person *p = [[person alloc] init];

宣告:oc

物件的宣告

:@property (nonatomic, retain) nsstring *name;非oc

物件的宣告

:@property (nonatomic, assign) int age;

方法的實現

:- (void)dealloc

IOS學習 OC記憶體管理

記憶體管理 引用計數器 oc物件被引用的次數,為0的時候該物件被銷毀,記憶體 retain 引用次數 1 返回的是物件本身 release 引用次數 1 沒有返回值 retaincount 獲取引用次數。dealloc oc物件被銷毀的時候會呼叫dealloc方法,繼承該 方法 放最後面 super...

iOS開發之oc(十一) 記憶體管理MRC

掌握內容 理解記憶體管理的原理 1.理解部分 1點選工程 build settings 通過gar關鍵字的搜尋搜出automatic re.cou.將此選項的設定改稱no 1.2.2析構函式 可以用來驗證物件是否被釋放 語法 void dealloc void setdog dog dog void...

iOS開發 Day20 OC 手動記憶體管理

1 只要呼叫了alloc,就必須有release autorelease 2 set方法的 規範 1 基本資料型別 直接複製 void setage int age 2 oc物件型別 void setcar car car 3 dealloc方法的 規範 一定要 super dealloc 而且要放...