「iOS開発におけるパターンによるオートマティズム」
そろそろ1章を1エントリーで書くのが厳しくなってきました。
私の学習が追いついていません。
と言うわけで、今回読む章も…
第3章【モデルのパターン】続き
3.3 モデルオブジェクトクラスのパターン
まずは Core Data を使わないケース。
3.3.1. 情報保持のためのインスタンス変数
モデルオブジェクトクラスの実装について、
実際のコードを追いながら解説されている。
ポイントは、以下。
1.モデルのインスタンス *01データの実体。 に必ず識別子 *02「その」インスタンスを特定するためのキー情報。 を持たせること。
2.識別子の作成にはCFUUID *03Core Foundation Unique Universal Identifer を使うのが便利なこと。 *04つか、わざわざ自前で識別子作るとかしんどくて嫌。
3.3.2. アクセッサ
モデルが保持するデータへのアクセッサの用意について解説されている。
ポイントは以下。
1.アクセッサはObject-Cのプロパティを利用して実装する。
2.各アクセッサは扱うデータの性質に合わせて
retain, assign, readonly を使い分ける。 *05readonlyはまあ、まんまだから解る。retain(保持)とassign(割当)の内容がいまいち不明。ちゃんと調べよう。
3.実装部でsynthesizeを行う。 *06「synthesize」が何かは、ちゃんと理解できていなかったので、後で調べる。コードを見る限りでは、クラスのデータメンバーとプロパティの関連付けを行っているようだったが…。
3.3.3. 保存と読み込み
モデルオブジェクトの保存について。
ポイントはNSCodeingプロトコル。
NSCodingに定義されている2つのメソッド、
initWithCoder:と encodeWithCoder:によってファイルへの保存が可能となる。
保存にはencodeWithCode:を使用。
読み込みにはinitWithCoder:を使用。
読み込んだ(デコードした)オブジェクトは、必ずretainしておくこと。
3.3.4. オブジェクトの破棄
deallocメソッドを実装し、
その中で、そのモデルの各データメンバと自身をreleaceしておく。
3.4 モデルマネージャクラスのパターン
これも Core Data を使わないケース。
3.4.1. モデルマネージャへの参照
要点は以下。
1.モデルマネージャのインスタンスは1つだけ。 *07つまり、シングルトン・パターン
2.外部からの呼び出しのため、自身への参照を持つ。
3.4.2. モデルインスタンスの管理
サンプルでは、配列にモデルインスタンスを格納して管理。
内部変数はNSMutableArrayだが、プロパティはNSArrayを使用。
つまり、配列の変更操作はプロパティ経由では行わず、
配列操作用のメソッドを別途用意する。
3.4.3. モデルへのアクセス
基本的に 追加、挿入、削除、移動、で構成される。
追加と挿入の違いは、末尾に入れるのが「追加」、
インデックスを指定して任意の場所に入れるのが「挿入」。
これらは、テーブルビューでの表示・操作との接続を念頭に置いたもの。
3.4.4. 保存と読み込み
一般的な保存⁄読込の機能実装に同じ。
saveとloadのメソッドを用意し、
実際の保存と読み込みはNSCodingというObject-Cのプロトコルに任せてしまう。
注意すべきは、保存⁄読込対象のファイル実在チェックを欠かさないこと。
今回のタイトルが「中編」であることからお分かりの様に、
まだ「後編」が残っています。
こんな調子で、あと6章。
本当に終わるんでしょうか…。
【おまけ】Xcode4 のインストールに3回失敗したよ
今日、3/10 に MacAppStoreにてXcode4がリリースされました。
従来、無料で提供されてきたXcodeでしたが、今回は600円。
Appleには何かポリシーがあって、開発環境を無料提供しているんだろうと思い込んでいたので、正直、ちょっとショックでした。 *08価格的にはお賽銭程度の値段ですので、即購入しましたが。
ダウンロードファイルサイズは4.5GB。
出勤時にダウンロードを開始、帰宅してからインストールに取り掛かりました。
今回あたりからは、実際にコードを書きながら学ぶつもりでした。
せっかくなら、最新版にアップデートして頑張ろうと考えたのです。
ところが…
インストールを開始すると、終了まであと少しと言うところで停止してしまいます。
そのまま、何のエラーも出ず30分…。
それを3回繰り返した結果、
「ダウンロードしたファイルが破損しているのかもしれない。」との結論に達し、
4.5GBを再ダウンロード中です。 *09寝る前に終わるんだろか…
脚注
↩01 | データの実体。 |
---|---|
↩02 | 「その」インスタンスを特定するためのキー情報。 |
↩03 | Core Foundation Unique Universal Identifer |
↩04 | つか、わざわざ自前で識別子作るとかしんどくて嫌。 |
↩05 | readonlyはまあ、まんまだから解る。retain(保持)とassign(割当)の内容がいまいち不明。ちゃんと調べよう。 |
↩06 | 「synthesize」が何かは、ちゃんと理解できていなかったので、後で調べる。コードを見る限りでは、クラスのデータメンバーとプロパティの関連付けを行っているようだったが…。 |
↩07 | つまり、シングルトン・パターン |
↩08 | 価格的にはお賽銭程度の値段ですので、即購入しましたが。 |
↩09 | 寝る前に終わるんだろか… |