1

我知道 ARC 中的实例变量是默认的__strong。当包含类仍然保留时,如何释放实例变量。在下面的例子v中是__strong

c在 A 的对象在某个位置创建并保留时分配。我想释放 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?
 }

}
4

5 回答 5

2
- (void)releaseC {
    c = nil;
}
于 2013-06-12T04:30:10.230 回答
2

c = 无;

但有些人会争辩说,从效率的角度来看,它没有效率。虽然释放将是立即的,因为它不再可用,但内存可能不会立即释放。

于 2013-06-12T04:30:33.813 回答
2
Obj *c; = [[Obj alloc] init];     

- (void)releaseC {
c = nil;
}

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

于 2013-06-12T04:35:00.947 回答
0

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

于 2013-06-12T04:32:07.817 回答
0

你可能想念你想做什么。我想你想释放内存问题的变量。你所要做的就是把它归零。实例变量是指向对象的指针。只要一个物体被某物指向,它就会保持活动状态。只要您不需要某些东西,您就可以“停止指向它”,它将自动释放。

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

于 2013-06-12T05:20:42.480 回答