1

首先我像这样将我的 ViewController 添加到 NavigationController 中,

SecondViewController *viewControllerObj = [[SecondViewController alloc] init];
[self.navigationController pushViewController:viewControllerObj animated:YES];
[viewControllerObj release];`

但这会造成崩溃,当我在导航栏中按下返回按钮后将其推送到 SecondViewController。所以我在 .h 文件中创建 SecondViewController 对象作为属性,并像这样在 dealloc 中释放 viewControllerObj,

现在我像这样将我的 ViewController 添加到 NavigationController 中,

在 .h 文件中,

@property (nonatomic,retain) SecondViewController *viewControllerObj;

在 .m 文件中,

self.viewControllerObj = [[SecondViewController alloc] init];
[self.navigationController pushViewController:self.viewControllerObj animated:YES];

[_viewControllerObj release]; // in dealloc method

当我分析我的项目时,这显示viewControllerObj上存在潜在泄漏,所以我修改了这样的代码,

SecondViewController *temp =  [[SecondViewController alloc] init];
self.viewControllerObj = temp;
[temp release];
[self.navigationController pushViewController:self.viewControllerObj animated:YES];

现在我清楚了潜在的泄漏

但是我不知道这是否正确,是否每个viewController对象都需要声明为Property并在dealloc时释放????

4

1 回答 1

0

就正确性而言,您始终可以使用自动发布而不是发布。自动释放是延迟释放。它安排对象在以后接收它的释放。

链接

因此,不要使用发布消息,而是使用您的第一个代码自动发布。

SecondViewController *viewControllerObj = [[[SecondViewController alloc] init] autorelease];
[self.navigationController pushViewController:viewControllerObj animated:YES];

autorelease :在当前自动释放池块结束时减少接收者的保留计数。

release :减少接收者的引用计数。(必需的)。您只需实现此方法来定义您自己的引用计数方案。这样的实现不应该调用继承的方法;也就是说,它们不应包含对 super 的发布消息。

高级内存管理编程指南

于 2013-04-16T05:15:18.390 回答