虽然我在Xcode中通常使用ARC模式,但有时候,我仍然需要释放一些临时obj。我不知道如何使用它。这是一个例子:
TestViewController.h文件
TestViewController
{
A* a;
A* b;
}
TestViewController.m文件
viewDidLoad()
{
a = [[A alloc] init];
b = a;
[a release];
// I want to release a here, but when I use [a release], there will be a build error. "release is unavailable: not available in ARC mode"
}
有人能给我一些线索吗?
答案 0 :(得分:4)
a
。这样做无论如何都是不正确的,因为a
仍然指向对象。
但你仍然不应该以这种方式直接访问你的ivars。虽然ARC会做正确的事情(在一秒钟内更多),但它会导致许多其他问题。始终使用除init
和dealloc
之外的访问者。这应该是:
@interface TestViewController
@property (readwrite, strong) A* a;
@property (readwrite, strong) A* b;
@end
@implementation TestViewController
- (void)viewDidLoad {
self.a = [[A alloc] init];
self.b = self.a;
}
至于ARC在您的代码中实际执行的操作,它将插入所需的保留字符:
A* tmp = [[a alloc] init];
[a release];
a = tmp;
A* tmp2 = [a retain];
[b release];
b = tmp2;
如果您不希望a
指向旧值,请将其设置为nil
,如Michael所说。这与保留和发布无关。专注于对象图。你希望每件事指向什么? ARC将负责保留计数。
答案 1 :(得分:2)
a = nil;
应该做你想做的事。
但是,您创建的对象将被分配到b
并由b
保留。