我有两个使用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?
答案 0 :(得分:0)
在ARC中,您不会使用release
,autorelease
或retain
。 ARC为您做到了这一点。您只需像往常一样[[Class alloc] init];
分配它,但不需要将上述消息发送到您的对象。
答案 1 :(得分:0)
使用ARC时,您不需要释放viewController,编译器会为您添加release
和retain
..
所以在ARC中这样做:
MyViewController* viewController = [[MyViewController alloc] init];
[self.navigationController pushViewController:viewController animated:YES];
使用retain
,release
和autorelease
会导致编译错误。
请注意,使用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会自动计算指向已分配对象的活动指针,当没有指向对象的活动指针时,会自动为您释放该对象。所以你不必自己调用这些方法。