0

我有以下代码:

NSObject *anObject = [[objArray lastObject] retain];
[objArray removeLastObject];
return [anObject autorelease];

使用 ARC 我不能使用保留或自动释放,但如果我:

NSObject *anObject = [objArray lastObject];
[objArray removeLastObject];
return anObject;

从数组中删除时没有anObject达到 0 保留计数?

我发现: ARC 中的 '[[something retain] autorelease]' 的等价物是什么? 但它确实看起来像同样的情况。

4

2 回答 2

2

基本上anObject不会发布,因为它仍然在return声明中使用。

ARC 所做的是查看您的代码,确定您在哪里使用每个变量,并在将代码编译成可执行文件时在后台插入相应的retain和调用。release

如果您想绝对确保变量在关键部分中仍然存在(尽管很少需要这样做,当然也不是在这里),那么您可以将其显式声明为 __strong. 但是请确保您了解对象之间的关系,因为您可以通过违背 ARC 的目的轻松创建保留周期和内存泄漏。

于 2012-10-10T05:53:28.977 回答
0

您的第二个代码块很好,因为局部变量“anObject”是一个强引用。仅当您将“anObject”声明为弱引用时,此代码才会成为问题。

于 2012-10-10T05:54:27.980 回答