黑馬程式設計師 Object C基礎 九 記憶體管理

2021-06-29 05:45:42 字數 2560 閱讀 8751

管理範圍:任何繼承了

nsobject

的物件,對其他基本資料型別(int、char、float、double、struct、enum等)無效

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

- (void)setbook:(book *)book

}

- (void)dealloc

使用場景:

對於迴圈依賴關係來說,比方a類引用b類,同時b類也引用a類   

這種**編譯會報錯。當使用@class在兩個類相互宣告,就不會出現編譯報錯

用法概括

#import方式會包含被引用類的所有資訊,包括被引用類的變數和方法;@class方式只是告訴編譯器在a.h檔案中 b *b 只是類的宣告,具體這個類裡有什麼資訊,這裡不需要知道,等實現檔案中真正要用到時,才會真正去檢視b類中資訊

如果有上百個頭檔案都#import了同乙個檔案,或者這些檔案依次被#improt,那麼一旦最開始的標頭檔案稍有改動,後面引用到這個檔案的所有類都需要重新編譯一遍,這樣的效率也是可想而知的,而相對來講,使用@class方式就不會出現這種問題了

在.m實現檔案中,如果需要引用到被引用類的實體變數或者方法時,還需要使用#import方式引入被引用類

當兩端互相引用時,應該一端用retain、一端用assign

ios 5.0後

@autoreleasepool

ios 5.0前

nsautoreleasepool *pool = [[nsautoreleasepool alloc] init];

// .....

[pool release]; // 或[pool drain];

跟release的對比

book *book = [[book alloc] init];

[book release];

book *book = [[[book alloc] init] autorelease];

// 不要再呼叫[book release];

一般可以為類新增乙個快速建立物件的類方法

+ (id)book

外界呼叫[book book]時,根本不用考慮在什麼時候釋放返回的book物件

一般來說,除了alloc、new或copy之外的方法建立的物件都被宣告了autorelease

比如下面的物件都已經是autorelease的,不需要再release

nsnumber *n = [nsnumber numberwithint:100];

nsstring *s = [nsstring stringwithformat:@"jack"];

nsstring *s2 = @"rose";

5.       練習**

/*

1.autorelease的基本用法

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

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

3> 會返回物件本身

4> 呼叫完autorelease方法後,物件的計數器不變

2.autorelease的好處

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

2> 不用再關心什麼時候呼叫release

3.autorelease的使用注意

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

2> 占用記憶體較小的物件使用autorelease,沒有太大影響

4.錯誤寫法

1> alloc之後呼叫了autorelease,又呼叫release

@autoreleasepool

2> 連續呼叫多次autorelease

@autoreleasepool

5.自動釋放池

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

2> 當乙個物件呼叫autorelease方法時,會將這個物件放到棧頂的釋放池

6.自動釋放池的建立方式

1> ios 5.0前

nsautoreleasepool *pool = [[nsautoreleasepool alloc] init];

[pool release]; // [pool drain];

2> ios 5.0 開始

@autoreleasepool

*/#import #import "person.h"

int main()

return 0;

}void test()

person *p3 = [[[person alloc] init] autorelease];

} // } 結束代表銷毀釋放池

}

黑馬程式設計師 Object C 類別

類別是一種為現有的類新增新方法的方法。宣告類別 類別的宣告格式和類的宣告格式相似 inte ce nsstring numberconvenice 類別的名稱是numberconvenience,該類別將向nsstring類中新增方法 nsstring lengthasnumber end 宣告具有...

黑馬程式設計師 Object C 物件的特性

特性 property 是object c 中組合了新的預編譯指令和新的屬性的訪問器語法。新的特性功能顯著減少了必須編寫的冗長 的數量。老 inte ce allweatherradial tirl void setrainhandling float rainhandling float rain...

黑馬程式設計師 Object C之迴圈引用

asp.net unity開發 net培訓 期待與您交流!關於迴圈引用的解決方法 兩端迴圈引用解決方案 1 一端用retain 2 一端用assign 首先定義兩個類 card person,其中card中又person的屬性,person中又card得屬性。1 card的宣告 class pers...