非常に優れた本「Beginning iPhone Development」(Apress) の第 9 章で、ナビゲーション コントローラと階層テーブル ビューを使用してアプリケーションを構築する方法を説明しています。
Instrument/Activity モニターを使用してアプリケーションを起動すると、アプリケーションは正常に動作しますが、大きな問題があります。テーブル ビューから子テーブルにドリルダウンするたびに、1Mo 以上のメモリが必要になります。このメモリは決して解放されず、もちろん最後にアプリケーションがクラッシュします。私にとって、問題は「RootViewController.h」の次のメソッドから発生します: (元のソース コードは、このZIP ファイル
の「09 Nav」です)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSUInteger row = [indexPath row];
SecondLevelViewController *nextController = [self.controllers objectAtIndex:row];
NavAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
[delegate.navController pushViewController:nextController animated:YES];
}
このメソッドでは、「nextcontroller」が解放されることはありません。コマンド [nextController release] を使用するため。次の変更を加えました。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSUInteger row = [indexPath row];
SecondLevelViewController *nextController = [[SecondLevelViewController alloc] init ];
nextController = [self.controllers objectAtIndex:row];
NavAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
[delegate.navController pushViewController:nextController animated:YES];
[nextController release];
}
これで、アプリケーションを実行すると、メモリが十分に解放されます! しかし、すでに "訪問" した子テーブルをドリルダウンしようとすると、アプリケーションがクラッシュします。
どうすればメモリを適切に解放できますか?
前もって感謝します。