【问题标题】:Potential leak of an object allocated - UIViewController分配的对象的潜在泄漏 - UIViewController
【发布时间】:2011-06-06 22:25:40
【问题描述】:

我的应用是基于视图的应用。 我有 3 个视图控制器。 (主要,次要,细节) 每个视图控制器都有一个 UIView。 在 MainViewcontroller 中,有一个启动 subView 的按钮。 方法如下。

-(IBAction) LaunchSubView: (id)sender {

subViewcontroller *viewController = [[subViewcontroller alloc] init];

UIView *currentView = self.view;
[UIView transitionFromView:currentView 
                    toView:viewController.view 
                  duration:0.5 
                   options:UIViewAnimationOptionTransitionFlipFromLeft   
                completion:^(BOOL finished){}];

}

当我尝试构建和分析时,我收到了这个警告。 在第 54 行分配并存储到“viewController”中的对象的潜在泄漏 我在transitionFromView方法和subViewcontroller *viewController = [[[subViewcontroller alloc] init] autorelease]之后尝试了[viewController release];这两种方式都会导致应用程序崩溃。知道我该怎么做吗?提前感谢您的任何帮助。 =)

【问题讨论】:

  • 你运行的是什么版本的 Xcode?我试图重现该问题但没有成功。
  • 嗨..我正在运行版本 3.2.5

标签: iphone memory-management memory-leaks uiview uiviewcontroller


【解决方案1】:

transitionFromView:toView:duration:options:completion: 不是正确的使用方法。您可能应该使用presentModalViewController:animated:

如果您阅读transitionFromView:toView:duration:options:completion: 的文档,它会解释:

此方法仅修改视图层次结构中的视图。它不会以任何方式修改应用程序的视图控制器。例如,如果您使用此方法更改视图控制器显示的根视图,则您有责任适当地更新视图控制器以处理更改。”

【讨论】:

  • 没错,另外你不应该像这样嵌套 UIViewController 的视图。但是,最好有两个视图,它们是单个 UIViewController 根视图的子视图,并使用 transitionFromView:toView:duration:options:completion: 在它们之间切换。
  • @Jonah 为什么你说我们不希望下一个这样的 UIViewControllers?我已经在我的应用程序中这样做了几次,我想保持我的代码模块化,而不是把所有东西都集中到一个或两个单一的视图控制器中?
  • @Straddle 看看我对stackoverflow.com/questions/4591586/… 的回答。将代码拆分为多个控制器固然不错,但它们不一定都继承自 UIViewController。
【解决方案2】:

尝试使用

subViewcontroller *viewController = [[subViewcontroller alloc] initWithNibName:@"name of you nib file" bundle:@"if you have a bundle otherwise nil"]

并在方法结束前释放viewController对象 像这样

[subViewcontroller release];

【讨论】:

  • 对不起,我已经习惯了 xcode 的自动完成,所以我不记得所有的方法名称。顺便谢谢
  • 嗨..一旦我释放视图控制器,应用程序就崩溃了。只要我不发布它,该应用程序就可以正常工作。但我有潜在的泄漏。 =(
  • 是的,我认为您没有将对象保留在其他视图控制器中。您确定要为另一个视图中的所有对象设置属性吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多