В Руководстве по программированию управления памятью Apple показано, три официально санкционированных метода написания методов доступа, которые должны сохранять или освобождать ссылки на объекты.
В случае первых двух методов (воспроизведенных ниже) в документации Apple говорится, что «[t] производительность метода 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
получает явный (и предположительно немедленный) выпуск?