将 ViewController.view 添加为不在导航控制器上的子视图时,我经常遇到的问题是无法正确创建和销毁 ViewController。
例如:
MyViewController *myViewController = [[MyViewController alloc] init];
[currentView addSubView:myViewController.view];
[myViewController release];
如果它是一个无控制器视图并且没有用户必须与之交互的 UIControls,那效果很好。但是向该视图的视图控制器发送消息会导致EXEC_BAD_ACCESS因为它们不再在内存中。
MyViewController *myViewController = [[MyViewController alloc] init];
[currentView addSubView:myViewController.view];
这在发送消息时有效,但它是内存泄漏并被静态分析器捕获。
将其设置为当前视图控制器的属性有时会起作用。但是,如果我需要创建一个数量未知的 MyViewController 并将它们添加到 UIScrollView 之类的东西中,那也行不通。
for (int i = 0; i < [myViewControllers count]; i++) {
MyViewController *myTmpViewController = [[MyViewController alloc] init];
[myCurrentUIScrollView addSubview:myTmpViewController.view];
[myTmpViewController release];
}
如果 myTmpViewController 有用户交互或类似的东西,仍然会崩溃。如何添加它并正确释放它?