ストーリーボードに2つあります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 をリリースする必要があると考えるようになりました (特に、retain 属性を持つプロパティであるため)。しかし、これは役に立たなかったようです。どんな助けでも大歓迎です。私はまだメモリ管理について学んでいます。
アップデート
ビュー間の切り替えを 3 回繰り返した後、デバッガーの出力が表示されます。ViewController の viewDidUnload と didReceiveMemoryWarning の 2 つのメソッドに 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