我在做别人的代码。我以前从未遇到过这样的事情:
return [[[NSObject alloc] init] autorelease];
有人可以告诉我这意味着什么以及为什么会有人使用它?为了清楚起见,我不是在问自动释放部分。关于这段代码,我会有同样的问题:
-(id)someMethod
{
lots of lines of code
...
return [[NSObject alloc]init];
}
答案 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];
}