與許多objc開發者一樣,我最終閱讀並重新閱讀了Apple內存管理編程指南,因爲這是理解保留/釋放/自動釋放機制的最佳方式。Apple內存管理編程指南/硬示例
在這個頁面中,真的是有一個例子,我不明白:
塊引用
技術1
在技術1,值由返回吸氣器在呼叫範圍內自動釋放:
- (NSString*) title {
return [[title retain] autorelease];
}
- (void) setTitle: (NSString*) newTitle {
if (title != newTitle) {
[title release];
title = [newTitle retain]; // Or copy, depending on your needs.
}
}
由於對象從get訪問在當前範圍自動釋放返回,如果屬性值發生變化,也仍然有效。這使訪問器更加健壯,但是以額外開銷爲代價。如果您期望經常調用getter方法,則保留和自動釋放對象的額外成本可能不值得性能成本。
技術2
像技術1,技術2也使用一個自動釋放技術,但這次是在setter方法這樣做:
- (NSString*) title {
return title;
}
- (void) setTitle: (NSString*) newTitle {
[title autorelease];
title = [newTitle retain]; // Or copy, depending on your needs.
}
技術2的性能明顯優於技術1的s在那裏吸氣劑被稱爲比二傳手更頻繁。
塊引用
好,強烈的思想最終我理解蘋果公司所說的話幾分鐘,對於具有後的原因[標題保留]自動釋放。但是如果我想合成它,我怎麼能指定一個setter?我只知道保留或複製作爲setter的訪問方法。例如:
@property (retain) NSString* title
會讓每個I設置一個新值,以標題時間標題保留。但是如何指定getter會像例子一樣返回[[title retain] autorelease]?是否它由XCode以這種方式隱式合成?
問候, Apple92