0

UIViewControllers在故事板中有两个(带有NavigationController)。

我正在访问相机并在 ViewController1 中拍照。我想切换到 ViewController2 并在UIImageView.

ViewController2 H 文件

@interface ViewController2 : UIViewController

{

-IBOutlet UIImageView *matchImage;

}

-(IBAction)restart:(id)sender;

@property (retain, nonatomic) UIImageView *matchImage;

@end

ViewController1 M 文件

在我的代码拍照后,我尝试使用以下语法切换视图

ViewController2 *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController2"];

[self.navigationController pushViewController:vc animated:YES];

[vc.matchImage setImage:tempImage];

我第一次拍照时效果很好,我在 ViewController2 中看到了图像。

但是我在 ViewController2 上有一个后退按钮,语法如下

ViewController2 M文件

-(IBAction)restart:(id)sender

{

    ViewController1 *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController1"];

    [self.navigationController pushViewController:vc animated:YES];

}

这成功返回 ViewController1,我可以再次拍照并重复该过程。但是在重复该过程大约 3-4 次后,我收到了 Received Memory Warning 并且应用程序崩溃了。在 Xcode 中运行分析器不会产生任何问题。

如果我注释掉以下行

[vc.matchImage setImage:tempImage];

然后我可以执行无休止的捕获(超过 50 个没有问题),但当然 ViewController2 不显示图像(它是空白的)。所以这让我相信我需要释放 matchImage (特别是因为它是一个具有保留属性的属性)。但这似乎没有帮助。任何帮助将不胜感激。我还在学习内存管理。

更新

这是更多信息,在视图之间来回切换 3 次迭代后,这是调试器输出。我在两个 ViewController viewDidUnload 和 didReceiveMemoryWarning 方法中放入了 NSLog 语句。因此,当发生 Received memory 警告时,似乎正在卸载 2 个视图控制器的 3 个“实例”。因此,对于视图控制器之间的每次切换迭代,我似乎都得到了一个新副本。这是你所期望的吗?

2012-10-22 08:23:32.008 TestApp [787:707] 收到内存警告。

2012-10-22 08:23:32.015 TestApp [787:707] viewDidUnload ViewController1: 0xfd52250

2012-10-22 08:23:32.017 TestApp [787:707] didReceiveMemoryWarning ViewController1: 0xfd52250

2012-10-22 08:23:32.023 TestApp [787:707] viewDidUnload ViewController2

2012-10-22 08:23:32.025 TestApp[787:707] didReceiveMemoryWarning ViewController2

2012-10-22 08:23:32.028 TestApp [787:707] viewDidUnload ViewController1: 0x16dc30

2012-10-22 08:23:32.030 TestApp [787:707] didReceiveMemoryWarning ViewController1: 0x16dc30

2012-10-22 08:23:32.033 TestApp [787:707] viewDidUnload ViewController2

2012-10-22 08:23:32.037 TestApp [787:707] didReceiveMemoryWarning ViewController2

2012-10-22 08:23:32.040 TestApp [787:707] viewDidUnload ViewController1: 0x171de0

2012-10-22 08:23:32.042 TestApp [787:707] didReceiveMemoryWarning ViewController1: 0x171de0

2012-10-22 08:23:32.044 TestApp[787:707] didReceiveMemoryWarning ViewController2

2012-10-22 08:23:32.046 TestApp [787:707] didReceiveMemoryWarning ViewController1: 0xfd87580

4

1 回答 1

1

您在restart方法中所做的不是回到以前的控制器,而是将第一个控制器类型的另一个副本添加到导航堆栈。尝试告诉导航控制器popViewControllerAnimated:

于 2012-10-22T12:46:15.513 回答