質問: [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のインスタンスは正常に削除されております。 実機、シミュレーター共に同様の現象が発生しております。 上記現象に関してご回答頂ければ幸いです。 よろしくお願い致します。
回答: Realmはデータを削除しても、元の領域は再利用のために残されます。 > > ディスクスペースを効率的に再利用するために、Realmファイルのサイズはそのまま維持されることに注意してください。 > > > ファイルサイズを小さくするには、コンパクションを実行します。 コンパクションは、 `-[RLMRealm writeCopyToPath:error:]`メソッドを使用して、新しいファイルとしてコピーすることで実行されます。 コピー後のファイルは不要な領域が完全に削除されたサイズになります。 :