0

在 ARC 环境中,我MyClass *mcObj = [[MyClass alloc]init]在使用它之后有一个对象,我应该就这样离开它还是mcObj = nil;在使用它之后执行此操作。

该对象可以存在于任何范围内,例如全局范围内viewcontroller或仅在方法内,-(void)aMethod;请解释这两种情况。

4

3 回答 3

6

答案是——“视情况而定”。

如果您在方法中创建它并且不将其分配给任何东西,那么当它超出范围时,它将被设置为 nil。(实际上,LLVM 会为您插入相关release调用)。

如果你在函数外部传递变量,那么局部变量在超出范围时仍然会被设置为 nil,但是如果你的对象有强引用,它就不会被释放。

一般来说,你真的不必考虑太多。如果你想保留一个对象,那么你要保持对它的强引用,否则你不必担心保留释放调用。

于 2013-04-08T13:01:51.863 回答
2

你这样写:

MyClass *mcObj = [[MyClass alloc]init];

所以希望它是函数内部的局部变量。

在这两种情况下,当你写mcObj = nil;的对象都会被释放并设置为 nil。

它相当于:

[mcObject release];
mcObj = nil;

在非电弧模式下。

于 2013-04-08T13:02:54.700 回答
0

就这样吧!

ARC会照顾它!ARC 将在它认为最好的地方释放/保留它。

于 2013-04-08T13:01:32.810 回答