0

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

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

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

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

3 回答 3

1

自动释放功能表明你想在未来释放这个对象,但不是现在,因为你仍然需要访问它。随着释放周期和内存池的释放,自动释放是内存管理中非常有用的工具。关于自动释放的信息,您可以参考: http: //developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html#//apple_ref/doc/uid/TP40004447。这是一个链接!发布和自动发布有什么区别? 希望这有帮助!

于 2012-05-09T18:17:57.427 回答
1

正在分配、初始化对象,然后将其添加到自动释放池中

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

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

TL;DR 如果没有人retain很快会使用该对象,它将在运行循环的下一次迭代中释放。

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

于 2012-05-09T18:20:19.653 回答
0

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

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

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

- (NSString *)modifyObject:(MyObject *)o {
    o.mySettableProp = @"MODIFIED!";
    return [o description];
}
于 2012-05-09T18:15:29.730 回答