2009-07-08 3 views
1

私は非常にグラフィック的に重いアプリケーションを書いていますので、ビューを一度作成し、将来の使用のために保持するビューコントローラ内にキャッシュ機構を実装しようとしています次のようになります。objective-cメモリ管理:ビュー要素をキャッシングする

これはすべて機能しますが、特定の問題については少し混乱しています。私はメモリ警告をシミュレートしたとき、私はそうのように、キャッシュをパージするメソッドを呼び出します。

- (void)purgeCachedContent 
{ 
    if(_logoView != nil)[_logoView release]; 
} 

しかし、これは何回か(deallocを、didReceiveMemoryWarningとviewDidUnload)と呼ばれる得ることができるよう、自分のアプリケーションの問題を引き起こしているようです。

リリースメッセージを送信するインスタンスが存在するかどうかを確認するにはどうすればよいですか?リリースされたビューをNSLogにしようとしても、EXC_BAD_ACCESSエラーが表示されるので、私はそれをやるのに最善の方法を考え出すのが難しいです。私も、オブジェクトのメッセージを送信することができないことに頼っているifステートメントを削除しましたが、これは同じエラーを引き起こします...

私はそれが私の目的何がわからない!

答えて

3

_logoViewは、それを解放するだけで自動的にnilに設定されないため、そのポインタを使用して呼び出しようとするメソッドは、有効なオブジェクトを含む以前の場所に移動します。これを解放した後に_logoView = nil;に設定して修正できます。

0

キャッシュしたい場合は、なぜそれを解放したいですか?

だけのinitに自動解放を使用します。

_logoView = [[[UIImageView alloc] initWithImage: [UIImage imageNamed: @"logo_header.png"]] autorelease];