Apple的Memory Management Programming Guide顯示了三種用於編寫需要保留或釋放對象引用的訪問器方法的官方認可技術。哪些內存管理技術在哪些情況下更好?
對於前兩種技術(下面轉載),Apple文檔說「技術2的性能明顯優於技術1,因爲在吸氣劑被調用的次數遠多於設定者「。
// Technique 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.
}
}
// Technique 2
- (NSString*) title
{
return title;
}
- (void) setTitle: (NSString*) newTitle
{
[title autorelease];
title = [newTitle retain]; // Or copy, depending on your needs.
}
這是技術1和技術2之間的唯一區別,還是使用了另一種具有的我可能需要知道其他微妙的後果?如果技術2使用性能更好的吸氣劑,是否遵循該技術1使用性能更好的吸氣劑,因爲title
獲得了明確的(並且可能是立即的)釋放?
如果dealloc方法適當地通過訪問器清除變量,那麼第二個技術不會導致崩潰因爲標題將被自動釋放,並且當新標題不同時,第二個二傳手更快。但它的確使用了更多的內存,因爲舊的標題並未立即發佈。 – ughoavgfhw 2011-01-09 03:14:51