【发布时间】:2011-01-08 22:17:24
【问题描述】:
Apple 的 Memory Management Programming Guide 展示了三种官方认可的技术,用于编写需要保留或释放对象引用的访问器方法。
在前两种技术的情况下(转载如下),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 获得了显式(并且可能是立即)释放?
【问题讨论】:
标签: objective-c memory-management accessor