ナビゲーションコントローラー上にないサブビューとしてViewController.viewを追加すると、ViewControllerを適切に作成および破棄できないことがよくあります。
例えば:
MyViewController *myViewController = [[MyViewController alloc] init];
[currentView addSubView:myViewController.view];
[myViewController release];
これは、コントローラーのないビューであり、ユーザーが操作する必要のあるUIControlがない場合に最適です。ただし、そのビューのビューコントローラにメッセージを送信すると、メッセージがメモリに存在しなくなるため、EXEC_BAD_ACCESSが発生します。
MyViewController *myViewController = [[MyViewController alloc] init];
[currentView addSubView:myViewController.view];
これはメッセージの送信時に機能しますが、メモリリークであり、静的アナライザーによってキャッチされます。
現在のViewControllerのプロパティとして設定すると機能する場合があります。しかし、不明な数のMyViewControllerを使用して束を作成し、それらをUIScrollViewのようなものに追加する必要がある場合は、どちらも機能しません。
for (int i = 0; i < [myViewControllers count]; i++) {
MyViewController *myTmpViewController = [[MyViewController alloc] init];
[myCurrentUIScrollView addSubview:myTmpViewController.view];
[myTmpViewController release];
}
myTmpViewControllerにユーザー操作などがあると、クラッシュします。これを追加して適切にリリースするにはどうすればよいですか?