需要有关ARC概念的帮助

时间:2013-04-08 12:58:53

标签: ios objective-c automatic-ref-counting

在ARC环境中,我使用它后有一个对象MyClass *mcObj = [[MyClass alloc]init]我应该保留它,或者在使用它之后执行此操作mcObj = nil;

此对象可以存在于viewcontroller中的全局范围内,也可以存在于方法-(void)aMethod;中,请解释这两种情况。

3 个答案:

答案 0 :(得分:6)

答案是 - “这取决于”。

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

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

一般来说,你真的不必过多考虑这个问题。如果你想保留一个对象,那么你应该保留一个强引用,否则你不必担心保留释放调用。

答案 1 :(得分:2)

你写得像:

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

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

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

相当于:

[mcObject release];
mcObj = nil;

在非圆弧模式下。

答案 2 :(得分:0)

就这样离开!

ARC会照顾它! ARC将在最适合的地方发布/保留它。