0

对于使用 ARC 的项目和没有 ARC 的项目,我有两种情况。

1)没有ARC的项目。我们可以使用以下。

 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

4 回答 4

0

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

于 2012-10-12T08:12:43.080 回答
0

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

因此,在 ARC 中,这将是:

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

使用retain,将导致编译器错误releaseautorelease


请注意,使用 ARC 时需要@property正确使用。用于strong您想要保留weak的属性和您只想保留的属性assign。如果您想要 iOS 4.3 支持,您不能使用weak但应该使用unsafe_unretained.

于 2012-10-12T08:12:49.087 回答
0
MyViewController* viewController = [[MyViewController alloc] init];
[self.navigationController pushViewController:viewController animated:YES];

仅当您使用 ARC 时,无需在推送后释放视图控制器,因为 ARC 负责所有版本,并且仅在编译时插入所有版本,因此它可以正常工作。

于 2012-10-12T08:14:35.810 回答
0

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

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

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

于 2012-10-12T08:15:19.617 回答