当存在viewcontroller时,使用ARC的正确方法是什么?

时间:2012-02-07 15:03:22

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

每次我展示我的新viewcontroller(作为presenter vc中的属性),如下所示:

if(self.viewController) [self.viewController release];
self.viewController = [[ViewController alloc] init];
[self presentModalViewController:self.viewController animated:YES];

所以我总是保证得到一个新的对象实例(如果该对象已经存在)。

但是现在我使用ARC并且没有任何想法如何发送我的对象发布消息(因为不适用于ARC)

你能帮我解决这个问题吗?

PS:每当我呈现gameVC时,我都需要一个新的对象实例。

全部谢谢!

4 个答案:

答案 0 :(得分:2)

self.viewController = [[ViewController alloc] init];
[self presentModalViewController:self.viewController animated:YES];

以上代码将始终显示一个新的vc,而apple的编译器将负责发布。

但是如果你认为上面有一些问题(这是一个神话)那么你也可以这样做

self.viewController = nil;
self.viewController = [[ViewController alloc] init];
[self presentModalViewController:self.viewController animated:YES];

答案 1 :(得分:1)

编译器会为您发布发布说明。你应该只使用这个代码,它应该工作正常:

self.viewController = [[ViewController alloc] init];
[self presentModalViewController:self.viewController animated:YES];

答案 2 :(得分:0)

self.viewController = [[ViewController alloc] init];
[self presentModalViewController:self.viewController animated:YES];

是正确的方法。

但是,即使您使用手动引用计数,此代码也可以,假设viewController是具有selfretain标志的strong属性。当您更改属性值时,先前的属性值将被释放,因此您无需自行释放它。

答案 3 :(得分:0)

您不应该持有指向视图控制器的指针。 我很确定你的代码应该是这样的:

ViewController *viewController = [[ViewController alloc] init];
[self presentModalViewController:viewController animated:YES];