ナビゲーションコントローラの謎を理解するのを手伝ってください。didFinishLaunchingWithOptions から呼び出される HomeViewController があります。HomeViewController ユーザーからボタンを押すと、私のコードは
-(IBAction)showMap:(id)sender
{
MapViewController *mapViewController = Nil;
mapViewController = [[MapViewController alloc] initWithNibName:@"MapView-iPad" bundle:nil];
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate.navigationController pushViewController:mapViewController animated:YES];
}
ユーザーが MapViewController から戻りたい場合、コードを使用します
-(IBAction)goBackToHome:(id)sender
{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate.navigationController popViewControllerAnimated:YES];
}
MapViewController を終了すると、すべてのリソースが MapViewController に関連付けられて解放されるという印象を受けました。このコードを MapViewController の initWithNibName 内に配置したことを確認します。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
[NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(printMessage) userInfo:nil repeats:YES];
}
return self;
}
-(void) printMessage
{
NSLog(@"I am inside Map View Controller");
}
驚いたことに、MapViewController をポップアウトした後でも、printMessage は引き続き発生します。何が起こっているのか、なぜ MapViewController がまだ実行されているのかを理解するのを手伝ってください。MapViewController が解放されたことを確認する方法はありますか?