管理範圍:任何繼承了
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...