(1) 會將物件放到乙個自動釋放池中(2) 當自動釋放池被銷毀時,會對池子裡面的所有物件做一次 release 操作
(3) 會返回物件本身
(4) 呼叫完 autorelease 方法後,物件的計數器不變
//寫完這行**,就不用再寫【p release】;
person *p = [[[person alloc] init] autorelease];
@autoreleasepool//此處銷毀釋放池
(1) 不用再關心物件釋放的時間(2) 不用再關心什麼時候呼叫 release
(1) 占用記憶體較大的物件不要隨便使用 autorelease(2) 占用記憶體較小的物件使用 autorelease,沒有太大影響
//alloc 之後呼叫了 autorelease,又呼叫 release
@autoreleasepool
//(2) 連續呼叫多次 autorelease
@autoreleasepool
(1) 在 ios 程式執行過程中,會建立無數個池子。這些池子都是以棧結構存在(先進後出)
(2) 當乙個物件呼叫 autorelease 方法時,會將這個物件放到棧頂的釋放池
nsautoreleasepool *pool = [[nsautoreleasepool alloc] init];[pool release]; // [pool drain];
@autoreleasepool
[nsstring stringwithformat:....];[nsdate date];
提供1個類方法來快速的得到1個物件. 規範 a. 這個類方法以類名開頭. 如果沒有引數就直接是類名 如果有引數就是 類名withxx: b. 使用類方法得到的物件,要求這個物件就已經被autorelease過了.+ (instancetype)person
如果加上@autoreleasepool- (void)dealstring
} 正常來說,我們宣告的10000個區域性變數str,會在方法執行結束進行釋放,也就是迴圈結束
- (void)dealstring
}}但如果加了自動釋放池,區域性變數出了自動釋放池就釋放了,所以區域性變數是一邊建立一邊釋放的,會避免區域性記憶體高峰。
Objective C記憶體管理
objective c的物件記憶體管理是一件非常有意思的事情,由其是在iphone嵌入式裝置中 想玩的省心點,就得熟知它的管理規則,由其是記憶體的管理機制。了解它的品性了才能在cocoa的世界裡如魚得水。否則,反之 如水得魚!1,乙個物件可以有乙個或多個擁有者 2,當它乙個擁有者都沒有時,它就會被 ...
Objective C 記憶體管理
objective c 記憶體管理 nsautoreleasepool pool nsautoreleasepool alloc init pool drain 事實上程式中可以有多個自動釋放池。自動釋放池其實並不包含實際的物件本身,僅僅是對釋放的對 象的引用。通過向目前的自動釋放池傳送一條auto...
Objective C 記憶體管理
objective c中,記憶體物件分二類 1 值型別,如 int float struct等基本資料型別 2 引用型別,通常是指繼承自nsobject類的oc物件 值型別在棧中,由系統自動管理,而引用型別在堆上,需要我們自己手工進行管理 oc中提供了二種記憶體管理機制 1 手動引用計數 mrc m...