RLMRealm deleteObjectで削除後、default.realmのサイズが小さくならない
Timeline(RLMObject)にネストしたTimelineItems(RLMObject) の内、
作成日が12時間前より古いデータを一括削除するコードを書きましたが、
データベースファイル(default.realm)のサイズが小さくなりません。
default.realmのサイズは
・アプリインストール直後は数十KB
・アプリを1日(24時間)使用した後は240MB(一時間毎に10MBずつ均等に増加)
と仮定します。
RLMRealm deleteObjectで12時間前より古いデータを一括削除した場合、想定では
・一括削除後は60MB(12/24=50%)
となるはずですが、実際には100MB程度にしかなりません。
以下、削除するコードになります。
RLMRealm *realm = [RLMRealm defaultRealm];
// 全てのタイムラインを取得
RLMResult *timelines = [Timeline allObjects]
// タイムラインを走査
for (Timeline *timeline in timelines) {
// timelineにネストしたモデルの内、作成日が12時間前より古いデータを取得
CGFloat hours = 12.0f;
NSTimeInterval secs = hours * 60.0f * 60.0f;
NSDate *priorDate = [NSDate dateWithTimeIntervalSinceNow:secs];
RLMResults *timelineItems = [timeline.timelineItems objectsWhere:@"(create_date <= %@)", priorDate];
[realm beginWriteTransaction];
// ネストした複数の子データを一括削除
for (TimelineItem *timelineItem in timelineItems) {
// ローカルに保存したキャッシュデータ(画像等)やリレーションを削除するカスタムメソッド
[timelineItem invalidate];
// RLMObjectを削除
[realm deleteObject:timelineItem];
// 削除されているか確認
NSLog(@"isInvalited: %@", @(timelineItem.isInvalidated)); // isInvalited: 1
}
[realm commitWriteTransaction];
}
上記コードのhoursを0とし、全件削除した場合は数十KBに戻るはずですが、実際にはそうはなりませんでした。
default.realmは破棄したデータが残る仕様になっているのでしょうか?
実際のプロジェクトではより複雑な処理を行っていたり、
モデル定義も上記モデル以外にも複数紐付いている為、
リレーション周りが問題の可能性もありますが、
Realm Browserで確認する限りTimelineItemのインスタンスは正常に削除されております。
実機、シミュレーター共に同様の現象が発生しております。
上記現象に関してご回答頂ければ幸いです。
よろしくお願い致します。