1

1 つのコントローラーで、次の方法で他のコントローラーのビューを追加します。

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を変更するためのボタンクリック方法の1つで、次のことを行います。

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 の大きさであるため、以前のメモリが完全に解放されないため、余分なメモリが原因でクラッシュします。

self.pdfView がメモリを完全に解放するようにするにはどうすればよいですか?

4

1 に答える 1

3

setter/getter メソッドを適切に実装していると仮定すると、次のpdfViewコードで 1 回も多くの回数を保持しています。

self.pdfView = [[PDFView alloc] init];
[self.view addSubview:self.pdfView.view];

これは、セッター forpdfViewも を呼び出すためretainです。

以下を使用する必要があります。

self.pdfView = [[[PDFView alloc] init] autorelease];
[self.view addSubview:self.pdfView.view];

次のステートメントも不要なので削除します。

[self.pdfView release];

これで十分なので:

self.pdfView = nil;

メソッドに割り当てpdfViewinit解放し、 [ PDF の変更] ボタンが押されるたびにdeallocビュー内の PDF を変更することをお勧めします。オブジェクトの内容が変更されるたびに // オブジェクトを変更する必要はありません。viewDidLoadinitaddSubviewremoveFromSuperviewreleasePDFView

于 2013-03-06T10:21:34.580 に答える