Objective c 什么';保留/自动收回已保留财产的额外好处是什么?
在我目前正在进行的一个项目中,我正在通过我前任的代码进行工作。我在这里遇到的其中一件事是这样的:Objective c 什么';保留/自动收回已保留财产的额外好处是什么?,objective-c,memory-management,retain,autorelease,Objective C,Memory Management,Retain,Autorelease,在我目前正在进行的一个项目中,我正在通过我前任的代码进行工作。我在这里遇到的其中一件事是这样的: - (NSDictionary *)userInfo { return [[userInfo retain] autorelease]; } 显然,类已经保留了userInfo,但我没有得到的是:retain自动删除这个对象的附加值是什么?这种方法的区别是什么: - (NSDictionary *)userInfo { return userInfo; } 干杯, EP.它允许
- (NSDictionary *)userInfo
{
return [[userInfo retain] autorelease];
}
显然,类已经保留了userInfo,但我没有得到的是:retain自动删除这个对象的附加值是什么?这种方法的区别是什么:
- (NSDictionary *)userInfo
{
return userInfo;
}
干杯,EP.它允许返回的结果在当前调用堆栈的整个过程中保持不变,即使拥有的对象在此期间被解除分配。Cocoa中的习惯是,没有拥有引用的getter返回的任何内容(即名称中没有“new”、“alloc”、“retain”或“create”的任何getter)将至少与封闭的自动释放池保持相同的时间 例如:
Object1 *object1 = [[Object1 alloc] init];
ResultObject *result = [object1 someResult];
[object1 release];
// result is still valid here, even though object1 was released
想象一下:
id x = [[A alloc] init];
NSDictionary *userInfo = [x userInfo];
[x release];
// Do something with userInfo ...
// Would fail if the getter did not retain/autorelease.
如果getter没有执行retain/autorelease操作,这将失败,因为
userInfo
将在x
被释放时被释放。可能他/她当时不懂内存管理?这可能有一个很好的理由,也许它“修复”了一个间歇性错误或相关问题。人们编写代码有各种各样的原因,有些时候,当他们再次访问代码时,代码对他们来说甚至毫无意义;)+1用于指出object1的发布,同时在someResult上仍有保留计数。不过,答案标记是Ole,因为它使用了与答案相同的术语。谢谢你,汤米!哦,好吧;我希望先回答,更笼统一点,并评论一下为什么有人会合理地认为结果仍然有效,这会给我带来一些额外的荣誉,但有了帮助就足够了。