Objective C 記憶體管理 二

2021-07-04 07:58:14 字數 1636 閱讀 4361

assign的屬性內部實現

setter方法:

// setter方法

@property (nonatomic, assign) nsstring *name;

- (void)setname:(nsstring *)name

getter方法:

// getter方法

- (nsstring *)name

觀察下面**會出現什麼問題?

nsstring *name = [[nsstring alloc] initwithformat:@」張三」];

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

[p setname:name];

[name release];

nslog(@」%@」, [p name]); // 如果物件型別使用assign之後,會出現野指標異常

[p release];

retain的屬性內部實現

setter方法:

// setter方法

@property (nonatomic, retain) nsstring *name;

- (void)setname:(nsstring *)name

}

getter方法:

// getter方法

- (nsstring *)name

copy的屬性內部實現

setter方法:

// setter⽅法

@property (nonatomic, copy) nsstring *name;

- (void)setname:(nsstring *)name

}

getter方法:

// getter方法

- (nsstring *)name

dealloc是nsobject的⼀個例項方法,與alloc對應,用於**開闢的記憶體空間。這個⽅法在物件引用計數為0時,由系統自動呼叫通常我們在dealloc中釋放類的例項變數。

dealloc使用

以person.m為示例,**如下:

- (void)dealloc

注意:

以person.m為示例,**如下:

return [p autorelease];是最完美的解決⽅案,既不會記憶體洩露,也不會產⽣野指標。

collection就是nsarray,nsdictionary,nsset…等容器類,collection會自主管理⾃己內部的元素。

collection記憶體的⾃主管理,加入collection中的物件會被retain,移除出collection的物件會被release,collection被釋放會對內部所有物件release。

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...