Objective c 自动释放返回值时的内存管理

Objective c 自动释放返回值时的内存管理,objective-c,memory-management,Objective C,Memory Management,我一直在网上搜索,读了很多帖子,但没有人能解释这到底是怎么回事。我知道约定中说,任何方法都必须返回自动释放的对象(alloc、new、copy和mutableCopy除外),所以类似这样的内容很好: -(MyClass*)findRandomName { return [[[MyClass alloc] initWithString:@"Something"] autorelease]; } 我的问题是,如果我使用方便的方法或类似的方法,我是否也应该对返回值调用autorelease?就像这里

我一直在网上搜索,读了很多帖子,但没有人能解释这到底是怎么回事。我知道约定中说,任何方法都必须返回自动释放的对象(alloc、new、copy和mutableCopy除外),所以类似这样的内容很好:

-(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”的调用在哪里?如果您认为这回答了您的问题,请不要忘记接受它。当计时器允许时,我肯定会接受;)