在一个控制器中,我按以下方式添加其他控制器的视图:
objSecondController = nil;
objSecondController = [[SecondController alloc]initWithNibName:@"SecondController"
bundle:nil];
[self.view addSubview:objSecondController.view];
在视图中加载了objSecondController,我执行以下操作:
self.pdfView = [[PDFView alloc] init];
[self.view addSubview:self.pdfView.view];
然后我根据其方法指定pdf
在用于更改pdf的按钮点击方法之一中,我执行以下操作:
if(self.pdfView)
{
[self.pdfView.view removeFromSuperview];
[self.pdfView release];
self.pdfView = nil;
}
然后再做:
self.pdfView = [[PDFView alloc] init];
[self.view addSubview:self.pdfView.view];
然后我根据其方法指定pdf
现在self.pdfView是第三方库,每当我使用self.pdfview时,它的保留计数会自动增加,所以当我发布self.pdfView时,它的保留计数不会变为0,所以虽然我释放它们但它不会释放。
pdf大到25MB和39 MB,因为之前的内存没有完全解除因内存过多而导致崩溃。
我应该怎么做才能使.pdfView完全释放内存,所以加载其他大型pdf时不会产生问题?
答案 0 :(得分:3)
假设您已正确实施了setter / getter方法,那么您使用此代码保留pdfView
一次太多次:
self.pdfView = [[PDFView alloc] init];
[self.view addSubview:self.pdfView.view];
这是因为pdfView
的设置者也会调用retain
。
您需要使用:
self.pdfView = [[[PDFView alloc] init] autorelease];
[self.view addSubview:self.pdfView.view];
同样删除此声明,因为没有必要:
[self.pdfView release];
这就足够了:
self.pdfView = nil;
我建议在pdfView
方法中分配init
并在dealloc
中发布,只需在viewDidLoad
和中更改视图中的PDF按下更改PDF 按钮。每当其内容发生变化时,init
/ addSubview
/ removeFromSuperview
/ release
PDFView
对象就无需更改。