你是如何在你的应用程序中加载新视图的?如果您使用的是 UINavigationController,您的 AppDelegate 应该像这样开始:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
RootViewController* rootController = [[RootViewController alloc] init];
UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:rootController];
[self.window setRootViewController:navController];
[self.window makeKeyAndVisible];
return YES;
}
要加载另一个视图(比如按下按钮),您将从根视图中执行以下操作:
SecondViewController *secondView = [SecondViewController alloc] init];
[self.navigationController pushViewController:secondView animated:YES];
这将使 UINavigationController 负责视图的内存管理。
至于旋转,这是通过给每个 ViewControllers 这个方法来处理的:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if(interfaceOrientation == UIInterfaceOrientationLandscapeLeft) return YES;
return NO;
}
只要您按照预期的方式使用 UINavigationController,您就不应该有任何非发布视图。您应该阅读 UINavigationController:http: //developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html
另一种可能性是您的视图控制器的子视图对其父视图/控制器有很强的引用。这将阻止父视图控制器解除分配,因为它给子视图控制器的保留计数为 1,而子视图控制器也给父视图控制器的保留计数为 1。这是一篇关于强引用和弱引用信息的 SO 帖子:Objective-C 声明的 @property 属性(非原子、复制、强、弱)