いまさら nsarray
DESCRIPTION
Cocoa 勉強会関西での発表資料です。TRANSCRIPT
いまさら NSArrayかねうちてつや
Cocoa勉強会関西 2013.12.14
NSArray
• Foundation のコレクションクラスのひとつ
• インデックス付きでオブジェクトを格納
• クラスクラスタを構成
• 関連: NSMutableArray, NSSet
クラスクラスタ
• NSArray そのものは抽象クラス
• イニシャライザが具象サブクラスのインスタンスを生成
• 具象サブクラスは非公開
• サブクラス化できる設計になっている
NSArray のサブクラス
• count と objectAtIndex: をオーバーライドすれば完成
• 好きなデータに NSArray インタフェースでアクセス
• 他のオブジェクト、ファイルシステム、データベース…
• 必ずしもデータをメモリに置かなくてもよい
NSArray ビュー
• もともとは NSArray になっていないデータに NSArray としてアクセスできるようにする
• 元のデータが変更されるとビューにも反映される
• NSArray は多くのフレームワークで充実したサポートがあるので利用用途が広い
• NSSet ビューとかも考えられる
NSArray ビューの例
• 別の NSArray の逆順に並んでいる NSArray ビュー
• 2 つの NSArray を連結した NSArray ビュー
• 文字列の1文字ずつを要素として持つ NSArray ビュー
Demo
NSArray のプロパティ• あるオブジェクトが持つコレクションへのアクセスを外部に提供したい
• NSMutableArray を返してしまうと、オブジェクト外から変更される可能性があってヤダ
• そもそも NSArray じゃないんだけど
• コレクションの中身を lazy に初期化したい
• immutable な NSArray ビューを返しましょう!
KVC と NSArray
• サブクラスを作らなくても NSArray ビューを返せる
• - (NSUInteger)countOfElements
• - (id)objectInElementsAtIndex:(NSUInteger)index;
• [obj valueForKey:@“elements”]
Demo
まとめ
• NSArray のサブクラスは簡単に作れる
• NSArray ビューはいろいろ用途があって楽しい
• KVC でサブクラスなしで NSArray ビューを公開できる
• KVC で NSSet や mutable コレクションも返せる
参考
• NSArray Class Reference
• Key-Value Coding Programming Guide
• Key-Value Coding Accessor Methods