/tmpと**/Caches**ディレクトリ内のファイルは、iTunesのバックアップ対象外でシステムにより自動で削除されます。
何となく使っていたら容量不足でアプリがクラッシュしてしまったので、2つの違いと運用方法について調べてみました。
パスの取得
Application_Home/tmp/
NSString *path = NSTemporaryDirectory();
Application_Home/Library/Caches/
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
違い
ディレクトリ | ドキュメント記載の使用例 | アクティブ中のシステムによる削除 | 非アクティブ中のシステムによる削除 |
---|---|---|---|
/tmp | 次のアプリの起動で保持する必要のないファイル | × | ◯ |
/Caches | ダウンロードコンテンツ等 | ◯ | ◯ |
運用方法と注意
/tmp
- アクティブ中にシステムによる削除を受けたくない一時ファイルに使用する。
- アクティブ中はシステムに削除されないため、ファイル容量に注意して管理しなければならない。
##/Caches
- アクティブ中にシステムが削除してもよい一時ファイルに使用する。
- アクティブ中にシステムによって削除された場合でも不具合が発生しない作りにしなければならない。
まとめ
今回調べるきっかけになった問題は、画像の一時的な保存に**/tmp**を利用していて、システムによる削除が入るから大丈夫かなーって思って何も考えずにどんどん保存してたら10時間くらい後にアプリ容量が10GBくらいになり(iPhoneの空き容量が0GB)クラッシュしました。(適切な処理をしていればクラッシュしないかもしれません)
あとドキュメントはちゃんと読みましょうということでした。