Objective c 自动释放返回值时的内存管理
我一直在网上搜索,读了很多帖子,但没有人能解释这到底是怎么回事。我知道约定中说,任何方法都必须返回自动释放的对象(alloc、new、copy和mutableCopy除外),所以类似这样的内容很好:Objective c 自动释放返回值时的内存管理,objective-c,memory-management,Objective C,Memory Management,我一直在网上搜索,读了很多帖子,但没有人能解释这到底是怎么回事。我知道约定中说,任何方法都必须返回自动释放的对象(alloc、new、copy和mutableCopy除外),所以类似这样的内容很好: -(MyClass*)findRandomName { return [[[MyClass alloc] initWithString:@"Something"] autorelease]; } 我的问题是,如果我使用方便的方法或类似的方法,我是否也应该对返回值调用autorelease?就像这里
-(MyClass*)findRandomName { return [[[MyClass alloc] initWithString:@"Something"] autorelease]; }
我的问题是,如果我使用方便的方法或类似的方法,我是否也应该对返回值调用autorelease?就像这里:
-(MyClass*)findRandomName { return [[MyClass startFromString:@"Something"] autorelease]; }
为什么,或者为什么不?感谢高级版。您的第一个示例不正确,因为它应该在调用
initWithString
之前调用[MyClass alloc]
,例如:
-(MyClass*)findRandomName {
return [[[MyClass alloc] initWithString:@"Something"] autorelease];
}
在第二个示例中,您应该不自动释放对象。startFromString
方法应该已经autorelease
该对象,如果您再次autorelease
它,您将过度释放该对象
在第二个示例中,FindAndomName
方法不拥有对象的所有权(因为它调用的方法不包含alloc
、new
、copy
或mutableCopy
的名称),因此它不应该释放该对象
您所说的“约定说任何方法都必须返回自动释放的对象(init、new和copy除外)”是不完全正确的。报告说:
您拥有您创建的任何对象
使用名称以“alloc”开头的方法创建对象,
“新建”、“复制”或“可变复制”(例如,alloc、newObject或
可变副本)
在第一行代码中,对“alloc”的调用在哪里?如果您认为这回答了您的问题,请不要忘记接受它。当计时器允许时,我肯定会接受;)