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