最初の答えが完全に正しいとは思いません。Apple のドキュメントによると、「シリアル化では、オブジェクトの値と階層内の位置のみが保持されます。同じ値のオブジェクトへの複数の参照は、逆シリアル化されると複数のオブジェクトになる可能性があります」。
そのため、シリアル化された単一のオブジェクトが、これらの複数の NSCoder から逆シリアル化されたときに単一のオブジェクトになるという保証はありません。
実装があなたの例のようなものである場合、物事について正しく考えていない可能性があります。アプリケーションの論理的な構成について考えると、複数のオブジェクトが同じデリゲートを共有できることが理にかなっているかもしれません。しかし、一般的に、誰かが NSCoder プロトコルを使用してデリゲートをエンコード/デコードするとは思いません。通常、デリゲートがデリゲートであるオブジェクトをエンコード/デコードすることを期待します。
たとえば、NSTableView を見てみましょう。おそらく、ユーザーは NSTableView の表示方法を構成することができます (おそらく、ユーザーは列のサイズを変更したり、表示する列を選択したりできます)。これは、NSCoding プロトコルを使用して保存および復元する場合に役立つ情報です。NSTableView にもデリゲートがあります。デリゲートは (MVC パラダイムからの) コントローラーである必要があり、ランタイム状態を維持する必要がない汎用コードであるため、NSCoding を使用して実際にエンコード/デコードする必要はありません。
したがって、理想的には、init メソッドを使用してデリゲート/コントローラーを作成します。ユーザーが最後に構成したときと同じように見えるように NSTableView を構成する必要があることを認識しているため、NSCoding を使用してディスクから古いテーブル ビューを取得し、最後に表示したときと同じようにユーザーに表示します。 .
MVC パラダイムのモデル層についても同じことが言えると思います。繰り返しになりますが、コントローラー層は、ユーザーがアプリケーションを使用して行ったことに固有のモデル オブジェクトをデコードする必要があります。
モデルまたはおそらくビューレイヤーからコントローラーレイヤーをインスタンス化しようとしているように聞こえます。本当に意味がありません。