Return语句创建并释放对象

时间:2012-05-09 18:08:44

标签: iphone objective-c ios object return

我在做别人的代码。我以前从未遇到过这样的事情:

return [[[NSObject alloc] init] autorelease];

有人可以告诉我这意味着什么以及为什么会有人使用它?为了清楚起见,我不是在问自动释放部分。关于这段代码,我会有同样的问题:

-(id)someMethod
{
lots of lines of code
...
return [[NSObject alloc]init];
}

3 个答案:

答案 0 :(得分:1)

自动释放功能表示您要在FUTURE中释放此对象,但现在不是因为您仍需要访问它。随着发布周期和内存池的释放,自动释放是内存管理中非常有用的工具。 有关自动释放的信息,请参阅:http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html#//apple_ref/doc/uid/TP40004447。 这是一个链接! What is the difference between releasing and autoreleasing? 希望这有帮助!

答案 1 :(得分:1)

正在分配,初始化对象,然后将其添加到autorelease pool

引用Apple文档(上面的链接):

  

自动释放池提供了一种可以发送对象的机制   “延期”发布消息。这在您遇到的情况下很有用   想要放弃对象的所有权,但又想避免使用   立即解除分配的可能性(例如当你   从方法返回一个对象)。通常,您不需要创建   你自己的自动释放池,但在某些情况下   你必须或者这样做是有益的。

TL;如果没有人retain该对象很快就会出现,它会在run loop的下一次迭代中被释放。

在不知道任何细节的情况下很难说出为什么有人想要首先分配一个NSObject。我建议在项目中搜索该方法的用法示例,看看下一个对象会发生什么。

答案 2 :(得分:0)

为方便起见,它只是返回一个自动释放的对象。这意味着当您使用该功能时,您通常不必向其附加autorelease消息。您可能总是希望某些对象被自动释放。

例如,Objective-C中许多包含的便利(“工厂”)方法返回一个自动释放的对象。您可能熟悉[NSString stringWithFormat:__FORMAT__],它会返回自动释放的NSString。看看http://memo.tv/archive/memory_management_with_objective_c_cocoa_iphone

作为函数可能返回对象的原因的示例,请考虑同步URL请求,您可能会或可能不关心响应,或者类似以下的函数:

- (NSString *)modifyObject:(MyObject *)o {
    o.mySettableProp = @"MODIFIED!";
    return [o description];
}