2011-09-05 18 views
9

さまざまなオブジェクトをNSCacheに保存し、メモリ警告がヒットしたときにそれらを自動的に削除する必要があります。だから私はNSCacheの値に入れたインスタンスをラップするのに使う、次のNSDiscardableContent実装を書いています。一般的なNSDiscardableContentの実装でNSCacheを使用する方法

しかし、私は "メモリの警告をシミュレートする"を実行するとキャッシュから削除されることはありません。 NSDiscardableContentの実装に何か問題がありますか?または、メモリの警告が発生したときに、キャッシュに値をドロップさせるために何か他の処理を行う必要がありますか?

+0

これは答えではありませんが、あなたのdeallocメソッドで設定を使用するのは悪い習慣です。誰かがKVOなどを聴いているかわかりません。代わりに '[オブジェクトリリース]'を実行してください:) – deanWombourne

+0

@deanWombourne Thereオブジェクトがもはや保持されていないので、 - (void)deallocでオブジェクトを聴いている人はいないはずです。それとも私は間違ったことを理解していますか – radiospiel

+0

これ以上保存されていないからといって、誰も聴いていないというわけではありません;)Appleの話題はhttp://developer.apple.com/library/です。 mac /#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.htmlそしてより興味深い会話はこちら:http://www.cocoabuilder.com/archive/cocoa/242096-avoiding-kvo-in-dealloc.html – deanWombourne

答えて

8

NSCacheのデフォルトの動作では、メモリの警告があるときにオブジェクトを捨てることができます。

オブジェクトを「NSDictionary」のようにキャッシュに保存するだけで、メモリが逼迫するとクリーンアップされます。破棄可能なオブジェクトにそれらをラップする必要はありません。例えば。

[myCache setObject:foo forKey:@"bar"]; // foo will be released if memory runs low 

それはドキュメントから非常に明確ではないですが、メモリが低いとき、オブジェクトは必ずしも解除せずに、サブコンポーネントをリリースすることができる私の知る限り、<NSDiscardableContent>コンテンツ・プロトコルの目的は、より複雑な動作を実装するためのものです自体。

関連する問題