如何切换到另一个XIB并完成释放以前的XIB?

时间:2011-10-31 21:52:29

标签: ios xcode uiviewcontroller xib

我目前正在创建一本iPad书籍。不幸的是,由于这是我的第一个iPad项目,我正在以非常规的方式编写代码。

这是一本20页的书,我有20个XIB。在每个XIB上,我正在调用下一个XIB,但我担心的是当前的XIB没有被卸载并且仍在占用内存。当我在第10页左右时,应用程序将因didReceiveMemoryWarning而崩溃。

我正在使用两种不同的方法切换视图(我不知道哪一种更适合我的目的):

#METHOD 1
-(IBAction)NextPage:(id)sender
{
    nextPage = [[NextPage alloc] initWithNibName:@"NextPage" bundle:nil];
    [self.view addSubview:nextPage.view];
    [self presentModalViewController:nextPage animated:YES];
    [self.view release]; // this was added to hopefully release the current view. 
}


#METHOD 2
-(IBAction)NextPage:(id)sender
{
    NextPage *nextpage = [[[NextPage alloc] init] autorelease];
    [self presentModalViewController:nextpage animated:YES];
}

每个视图都有按钮和内容,但我想确保在每次调用时从内存中完全删除它们。

我使用dealloc尝试删除视图,但是当我检查内存泄漏并在页面之间来回切换时,内存会爬升。

- (void)dealloc {
    [view release]; // don't know which is which 
    [self.view release]; // is this correct?
    [super dealloc];
}

任何帮助表示赞赏!提前致谢。

3 个答案:

答案 0 :(得分:0)

如果以模态方式显示下一页(正如您所做的那样),则不会释放当前页面。而是将您的窗口rootViewController设置为新页面。

答案 1 :(得分:0)

如果你只是在书中的页面之间切换,你可能不应该以模态呈现。相反,你可以换掉视图。

http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/CreatingViews.html

  

... transitionFromView:toView:duration:options:completion:方法   为新的视图换出整套视图。

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/clm/UIView/transitionFromView:toView:duration:options:completion

另一种选择是在视图中使用图层。

http://www.raywenderlich.com/2502/introduction-to-calayers-tutorial

答案 2 :(得分:0)

UINavigationController可以更简单地处理这个问题。看一下文档。此外,从iOS5开始,现在有一个书籍类型viewController可以很好地为您服务。