十二 oc中autorelease的基本使用

2021-06-29 03:33:30 字數 2177 閱讀 9219

------- windows phone 7手機開發、.ios培訓、期待與您交流! -------

在前面的記憶體管理部落格中,提到過release方法,它是乙個物件方法,返回的是空值。autorelease方法也有著release方法有著大體相同的作用。注意@autoreleasepool這是oc中的乙個關鍵字,而autorelease是oc中的物件方法@autoreleasepool後的大括號中宣告乙個物件時寫上,例如person *p = [[[person alloc] init] autorelease];意思是講,把*p指向的person型別的物件丟到釋放池中,釋放池相當於記憶體空間中的一塊,在釋放池中,當釋放池結束後,系統會自動呼叫所有oc物件的release方法,釋放掉oc物件的記憶體,而不需要開發者進行手動釋放。同時,我們在學習記憶體管理機制時,必須關閉xcode的arc機制,否則我們無法呼叫記憶體管理相關的方法。

**演示:

main函式:

#import #import "child.h"

#import "toy.h"

int main()

// 釋放池的結束

return 0;

}

child類的宣告與實現:

#import #import "toy.h"

@inte***ce child : nsobject

@property (nonatomic,retain) toy *toy;

@end

#import "child.h"

@implementation child

- (void)dealloc

@end

toy類的宣告與實現:

#import @inte***ce toy : nsobject

@property (nonatomic,assign) int price;

@end

#import "toy.h"

@implementation toy

- (void)dealloc

@end

程式執行的結果為:

通過程式顯示的結果,可知,上面**符合蘋果的記憶體管理機制。有alloc就有release或者是autorelease,此處是後者。

小結:一、  autorelease需要注意的: 

1、記憶體占用較大的物件,一般不建議使用autorelease,因為autorelease並不能精確的釋放記憶體空間,它只會在釋放池結束後釋放記憶體空間

2、記憶體占用小的物件,使用autorelease影響不大

二、 autorelease的好處:

程式設計師不需要關心物件何時釋放,不需要留心release該寫在哪兒,或者是否漏掉了release,可以將注意力更多的集中到業務上來。

三、autorelease的基本用法:

1、將需要autorelease的物件扔到釋放池中,也就是@autorelease後面的大括號中,然後寫上autorelease方法

2、按照上面寫法寫好autorelease方法後,計數器的值不會改變,計數器的值減1,是在釋放池結束的時候進行

3.、autorelease是乙個物件方法,返回值是物件本身  

4、在ios程式執行過程中,會建立無數個釋放池,這些池子都是以棧結構存在的,棧是一種先進後出的資料結構

5、若多個釋放池巢狀,則會先釋放巢狀與最裡面的釋放放池,然後依次往外釋放

四、常見的autorelease的錯誤寫法:

1、@autoreleasepool 

這樣寫,錯誤在於,釋放池結束時,系統會呼叫兩次release方法,導致記憶體報錯

2、@autorelease

這樣寫,錯誤在於,已經將*c指向的物件丟到釋放池中,釋放池結束後,會自動呼叫release方法,弱使用者手動呼叫release方法,則會出現物件內部計數器多減去1的操作,會出現操作僵死的物件的錯誤,也就是報野指標錯誤,訪問了一塊壞的或者不可訪問的記憶體區域。

OC學習筆記 OC中的類

1.objc跟c的區別與聯絡 首先 objc是乙個物件導向的語言 封裝 繼承 多型 objc相當於c的乙個超集 即objc允許使用任何c語言 但增加了許多c沒有的特點 bigger easier 2.objc中的類與物件 類由介面 xx.h inte ce 和實現 xx.m implementati...

OC學習 OC中對檔案的操作

下面是一些簡單的關於oc中對檔案的基本操作的案例 應用程式檔案的移動 nsfilemanager new moveitematpath nsstring 路徑格式 user nsstring型別 topath nsstring error nserror autoreleasing 應用程式檔案的複...

oc中的繼承

繼承是物件導向程式設計的乙個重要原理,通過這個概念,將學會如何使用現有的類定義並使其適合自己的應用程式。oc中,沒有多繼承,只允許單繼承。乙個類可以繼承另外乙個類,被繼承的類稱為父類或超類,繼承的類稱為子類。父類自身也可以有父類,沒有父類的類位於層次結構的最頂層,稱為根類,oc中的根類是nsobje...