Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 641 - Zoomania 10 「やはりお前らのCoreDataの使い方も間違っている」

NSManagedObjectContextの扱いですが、ネットで調べていると次のページを無視する訳にはいかないでしょう。

curiosity.co.jp

この記事は2014年に書かれていて、コメント(Qita版にも同様の記事)にディスカッションの後も無いので彼の主張が正しいのかどうか分かりません。はっきり言って混乱しています。

プロジェクト新規作成時に「Use CoreData」のチェックマークを入れると、自動的にAppDelegateクラスに「Core Data Stack」が生成されるのですが、上記の作者は次のように疑問を呈しています。

AppDelegateの役割はiOSから受け取る処理を行うものであって、データの永続化のためにNSManagedObjectContextを生成したりするのは役割として間違っています。

「AppDelegateの役割はiOSから受け取る処理を行うもの」という解釈ですが、これはユーザーが書いたコードでiOSを操作することで、iOSから間接的にAppDelegateにフィードバックをかけるということだと私は考えました。覚えていますか、スタンフォード大のポール先生の次の講義

yataiblue.hatenablog.com

まさにAppDelegateの役割は、ここでいう「Notification & KVO」ということになるんじゃないでしょうか?

するとCore Data Stackの働きを考えると、アプリの外部にあるSQLiteと自動的にやり取りをするので、間接的のような気がしましたが、ManagedObjectContextにユーザーが働きかけなければいけないので、iOSから受け取る処理だけを扱っているとは言えませんね。

では次の主張はどうでしょうか?

テンプレートのまま実際のプロジェクトで使っていくと、確実にAppDelegateが肥大化していくのは言うまでもない

AppDelegateにCore Data Stackを作ろうが、Core Dataクラスを別ファイルに用意したとしてもアプリ全体でみればメモリー消費が肥大化するのを抑えることはできないんじゃないでしょうか?別ファイルで肥大化するのかAppDelegateで肥大化するのとではパフォーマンスに差が出るのでしょうか? Core Dataが肥大化するかどうかは、スクラッチパッド役のNSManagedContextの扱い方によると思います。

なぜAppleはCore Data Stackにテンプレートを置いたのでしょう?

考えても分からないので、今のところAppDelegateからcontextのリファレンスを必要とするViewControllerに渡してしまうやり方を続けます。

今日はこれだけ。