Objective C 9 記憶體管理 補充

2021-07-05 16:47:57 字數 1614 閱讀 4030

@autoreleasepool 

#pragma 驗證person類setcar方法裡的:[_car release]

#pragma 驗證person類setcar方法裡的:if (_car != car)

// 類用assign可能會造成野指標和記憶體洩露的問題 所以要使用retain

}

person類:

#import @class car;

@inte***ce person : nsobject

//@property (nonatomic,retain) car *car;

- (void)setcar:(car *)car;

- (void)go;

@end

#import "person.h"

#import "car.h"

@implementation person

- (void)setcar:(car *)car

}- (void)go

- (void)dealloc

@end

car類:

#import @inte***ce car : nsobject

- (void)setspeed:(int)speed;

- (void)run;

@end

#import "car.h"

@implementation car

- (void)setspeed:(int)speed

- (void)run

- (void)dealloc

@end

在setter 方法中不寫_car retain會造成野指標。。。。

animal *d = [dog new];

// 多型:沒有繼承就不能實現多型機制,父類指標可以指向不同的子類物件

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

// 如果陣列建立是用[[nsmutablearray alloc] init],則需要在用完後:對陣列進行release

nsmutablearray *array = [nsmutablearray array];

// 把物件放到陣列中的時候,物件的引用計數會+1

[array addobject:p];

nslog(@"%lu", p.retaincount); // 結果是:2

// 從陣列中移除的時候,引用計數-1

[array removeobject:p];

nslog(@"%lu", p.retaincount); // 結果是:1

[p release];

集合的記憶體管理:集合會管理自己的元素

新增物件時,會對這個物件retain一次

移除物件時,會對這個物件release一次

物件銷毀時,集合會對集合中包含的所有物件傳送一條release訊息

add/insert :計數器+1

remove/delete :計數器-1

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