0

我有一个使用以下代码从视图控制器转换到视图控制器的应用程序:

[self addChildViewController:self.aNewViewController];
    [self transitionFromViewController:self.currentViewController
                      toViewController:self.aNewViewController
                              duration:1.0
                               options:UIViewAnimationOptionTransitionFlipFromBottom
                            animations:nil
                            completion:^(BOOL finished) {
                                [self.aNewViewController didMoveToParentViewController:self];
                                [self.currentViewController removeFromParentViewController];
                                self.currentViewController=self.aNewViewController;
                            }];

当我在 iOS 5.0 设备上使用 Xcode 4.3 运行它时,它运行非常流畅并且使用了大约 30 - 50 mb。当我在任何设备上使用 Xcode 4.5 运行它时,每次我更改视图控制器时,应用程序都会从​​ 30 - 70 - 100 - 130 mb 跳跃而崩溃。每次我离开视图控制器时似乎都没有释放内存。我正在使用 ARC。

提前感谢您提供的任何帮助。

4

1 回答 1

1

在此处涉及的每个视图控制器的 dealloc() 中添加一条日志消息,其中包含一些唯一的字符串,并查看是否有任何参与转换的 VC 被释放。一个或几个没有被释放显然是问题所在。要寻找的是保留周期 - 它们的 ivars/properties 采用委托或保留它的类似参数。例如 NSTimer 保留它消息的对象。

如果您能找到这一点,解决方案是在您的 VC 中编写一个新方法,通过确保修改这些对象以不保留其所有者(对于 NSTimer,使其无效然后为零)来准备发布。

您可以在转换完成块中发送此新消息。

于 2012-09-30T12:27:23.360 回答