我知道ARC中的实例变量默认为__strong
。当仍保留包含类时,如何释放实例变量。在以下示例中,v
为__strong
和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?
}
}
答案 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。