@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一次add/insert :計數器+1移除物件時,會對這個物件release一次
物件銷毀時,集合會對集合中包含的所有物件傳送一條release訊息
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...