如何在ARC中释放实例变量 - Objective-C

时间:2013-06-12 04:28:13

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

我知道ARC中的实例变量默认为__strong。当仍保留包含类时,如何释放实例变量。在以下示例中,v__strong

当在A的对象创建一些位置并保留时,分配

c。我想发布 c实例变量。我该怎么做呢?releaseC方法应该释放c实例变量。

@interface A {
  Obj *c;
}

@implementation A {

 - (id)init {
   if((self = [super init])){
     c = [[Obj alloc] init];
   }
   return self;
 }

 - (void)releaseC {
  //what should be here?
 }

}

5 个答案:

答案 0 :(得分:2)

- (void)releaseC {
    c = nil;
}

答案 1 :(得分:2)

c = nil;

但有些人认为,从效率的角度来看,它并不富有成效。虽然从某种意义上讲它将立即释放,但它不再可用,但内存可能无法立即释放。

答案 2 :(得分:2)

Obj *c; = [[Obj alloc] init];     

- (void)releaseC {
c = nil;
}

您无法直接控制何时释放对象但您可以间接导致其发生。怎么样?记住ARC确实做了什么。与人类编码约定不同,ARC会解析您的代码并插入发布语句,因为即使是对象也可以发布。这样可以立即释放内存以进行新的分配,这非常棒/必要。意思是,将对象设置为nil,或者只是允许变量超出范围......导致A 0 RETAIN COUNT的事情迫使ARC在其中放置其释放调用。它必须......因为否则会泄漏。

答案 3 :(得分:0)

无需在ARC中释放变量。它自动完成

答案 4 :(得分:0)

您可能很想知道自己想做什么。我想你想要释放内存问题的变量。你所要做的就是零。实例变量是指向对象的指针。只要一个物体被某物指向它就会保持活力。一旦你不需要什么,你就可以“停止指向它”,它将自动发布。

至于设计,我不太清楚为什么你会有一个释放实例变量的公共方法。 (我假设它是公开的,因为如果它不是你只需要它而不必实际编写方法)。如果你确实打算能够从类外部发布一个实例变量,我只需将Instance变量设为public并从任何地方释放它,将其设置为nil。