なるようになるかも

力は多くの場合、その人の思いを超えない。

iOS Core Data 徹底入門を読んだ。

本業はAndroidなのにiOSの本ばっかり読んでる。

iOS Core Data 徹底入門

iOS Core Data 徹底入門

データ永続化の歴史をバイナリデータ、テキストデータ、XMLSQLと追いかけ、Core Dataの理解に必須となるKVC、KVOについて解説した上で、「オブジェクトを監視して、自動的にデータを永続化してくれると便利だよね。それがCore Dataだよ」と結論に持っていくところは非常に丁寧。

…なんだけど、その Core Dataに関係ない内容で本の半分 を消費してるのは賛否あると思う。

Appleの公式ドキュメントを読んで、「キー値監視」「永続ストアコーディネーター」「永続ストア」「永続スタック」「管理オブジェクト」「管理オブジェクトコンテキスト」「管理オブジェクトモデル」「フォールティング」みたいな単語群の理解が追いつかずに躓いた、という人向けとしては良いと思う。

自分もこの辺の理解が曖昧なままで使っていたので、図解が分かりやすかった。

またCore Dataはグラフィカルなエディタが充実しているのだけど、それがコードベースで実際にどう動作しているのか、実際にどのようなファイルが出力されるのかという点について掘り下げている辺りは非常に面白い。

一方で、カスタムなManagedObjectの作成方法についてはかなり詳述しているのに、終盤の解説が全体的に駆け足で物足りない印象。

特にiCloud連携やスレッド周りの話については、中級者以上向けのトピックとしてAppleのドキュメントへの参照で終わらせてしまっているのがややもったいないかなぁという印象。既にSQLiteで関係性を持つデータを扱っている人が、覚えることの多すぎるCore Dataを習得してまで置き換えることにメリットがあるとすれば、それはiCloud連携にしかない、と言っても過言ではないと思うので。

iCloudはネットワークからのフェッチなので、当然この本のようにメインスレッドからCore Dataを操作する、といったことはやるべきではないし(そういえばNSManagedObjectContextがスレッドセーフじゃない点について、本書内には触れていなかった気がする)、iCloud連携時の制約についても理解する必要がある。

ネットワーク経由でデータをフェッチする場合は、自分ならGCDで直列キューを作成して、Core Dataへの操作をキューイングする、というような実装を考えるけど、するとアプリケーションが非アクティブになった際に保存処理を保証するために、バックグラウンドタスクの実装が必須となってくるので、入門書の領域を超えてしまう、とかその辺が理由なのかなぁ。