忍者ブログ

佐崎司と愉快な仲間達

ゲーム、アニメ、CG、iOS開発など思いついたことを記事にしています。 管理人が3人いますので、記事にまとまりはないと思います。 iPhoneアプリのレビュー依頼も受け付けています。

NSCacheの使用には注意が必要

わか

iOSにはNSCacheというNSDictionaryに似たオブジェクトがあります。
それぞれメリットがありますが、NSCacheにはちょっと癖があるので、不具合が出やすいかもしれません。

NSCacheの特徴 (NSDictionaryとの相違点)
・スレッドセーフ
・設定したcost数に応じて、自動的にオブジェクトを消去する
・allKeysがない
・countがない
・サスペンド時にオブジェクトが消去される
・メモリリーク時にオブジェクトが消去される

オブジェクトが自動的に消去される観点から、常に使用する情報などはNSCacheに入れるべきではありません。いつのまにか中のオブジェクトが消えてしまう現象が発生するからです。さらにAppleが過去にNSCacehの仕様を変更したこともあるので、メンテナンスが大変です。

NSCacheの最大のメリットはスレッドセーフであることでしょう。私の勉強不足かもしれませんが、iOSのオブジェクトでスレッドセーフなのはNSCache以外知りません。
Appleのドキュメントに記載されているように、大きな画像など再生成可能なオブジェクトのみ設定するべきです。つまり中身がなくとも正常に動作できることを常に保証できなければなりません。

使い方を間違えなれば便利なので気をつけましょう。

拍手[0回]

PR