使用ARC推动viewcontroller?

时间:2012-10-12 08:08:54

标签: iphone ios ipad ios5 automatic-ref-counting

我有两个使用ARC的项目和没有ARC的项目。

1)没有ARC.we的项目可以使用以下内容。

 MyViewController* viewController = [[MyViewController alloc] init];
 [self.navigationController pushViewController:viewController animated:YES];
 [viewController release];

2)如何在ARC项目中实现上述目标。

      a)where can I allocate memory?
      b)where can I release viewcontroller after pushing?
      c)is there any standard for it?

4 个答案:

答案 0 :(得分:0)

在ARC中,您不会使用releaseautoreleaseretain。 ARC为您做到了这一点。您只需像往常一样[[Class alloc] init];分配它,但不需要将上述消息发送到您的对象。

答案 1 :(得分:0)

使用ARC时,您不需要释放viewController,编译器会为您添加releaseretain ..

所以在ARC中这样做:

MyViewController* viewController = [[MyViewController alloc] init];
[self.navigationController pushViewController:viewController animated:YES];

使用retainreleaseautorelease会导致编译错误。


请注意,使用ARC时需要正确使用@property。对于您要保留的属性,请使用strong;对于您想要weak的属性,请使用assign。如果您需要iOS 4.3支持,则无法使用weak,但应使用unsafe_unretained

答案 2 :(得分:0)

MyViewController* viewController = [[MyViewController alloc] init];
[self.navigationController pushViewController:viewController animated:YES];

只有当你使用ARC时才需要它,不需要在推送后释放viewcontroller,因为ARC负责所有版本并且它只在编译时插入所有版本,所以它可以正常工作。

答案 3 :(得分:0)

启用ARC时推送视图控制器非常简单:

MyViewController* viewController = [[MyViewController alloc] init];
[self.navigationController pushViewController:viewController animated:YES];

这是因为ARC会自动计算指向已分配对象的活动指针,当没有指向对象的活动指针时,会自动为您释放该对象。所以你不必自己调用这些方法。