在ARC环境中,我使用它后有一个对象MyClass *mcObj = [[MyClass alloc]init]
我应该保留它,或者在使用它之后执行此操作mcObj = nil;
。
此对象可以存在于viewcontroller
中的全局范围内,也可以存在于方法-(void)aMethod;
中,请解释这两种情况。
答案 0 :(得分:6)
答案是 - “这取决于”。
如果在方法中创建它并且不将其分配给任何东西,那么当它超出范围时,它将被设置为nil。 (实际上,LLVM会为您插入相关的release
电话。)
如果将变量传递给函数外部,那么局部变量在超出范围时仍将设置为nil,但如果对对象有强引用,则不会释放它。
一般来说,你真的不必过多考虑这个问题。如果你想保留一个对象,那么你应该保留一个强引用,否则你不必担心保留释放调用。
答案 1 :(得分:2)
你写得像:
MyClass *mcObj = [[MyClass alloc]init];
所以希望它是函数内部的局部变量。
在这两种情况下,当你写mcObj = nil;
时,对象将被释放并设置为nil。
相当于:
[mcObject release];
mcObj = nil;
在非圆弧模式下。
答案 2 :(得分:0)
就这样离开!
ARC会照顾它! ARC将在最适合的地方发布/保留它。