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