Apple 的内存管理编程指南展示了三种官方认可的技术,用于编写需要保留或释放对象引用的访问器方法。
在前两种技术的情况下(转载如下),Apple 文档说“在 getter 比 setter 更频繁地调用的情况下,技术 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 使用性能更好的 getter,它是否遵循技术 1 使用性能更好的 setter,因为它title
获得了显式(并且可能是立即)发布?