Cocoa Pro07

530 views
486 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
530
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Cocoa Pro07

  1. 1. 第7回 iPhone輪講
  2. 2. Lesson14 コレクション
  3. 3. 配列 NSArrayとNSMutableArray Cocoaのオブジェクトを入れておくために設計された配列のクラス NSStringのとき同様に2つあるのは,固定長と可変長のもの NSArray NSMutableArray NSObject
  4. 4. 配列の作成 1個のオブジェクトを指定して作成 NSArray + (id)arrayWithObject:(id)object オブジェクトobjectを指定してインスタンスを作成します
  5. 5. 配列の作成 複数のオブジェクトを指定して作成 メソッド名の最後にsがある事に注意 複数指定した引数の最後には必ずnilを指定する NSArray + (id)arrayWithObjects:(id)firstObj, ... - (id)initWithObjects:(id)firstObj, ... 複数のオブジェクトを指定してインスタンスを作成.引数の最後にはnilを指定.
  6. 6. 配列の大きさ 配列の大きさを調べる 出力結果はcount is 3となる NSArray - (unsigned)count 配列に含まれる要素の数を取得します
  7. 7. インデックスを指定した オブジェクトの取得 インデックスを指定して取り出す C言語の配列でc = names[o];のように,インデックスを指定して オブジェクトを取り出せた NSArrayでもobjectAtindex:というメソッドで取り出せる
  8. 8. インデックスを指定した オブジェクトの取得 thirdObjectは C となる インデックスが配列の大きさを超えないようにする事 もし超えると例外が発生する NSArray - (id)objectAtIndex:(unsigned)index インデックスindexを指定して要素を取得します
  9. 9. インデックスを指定した オブジェクトの取得 objectAtIndex:でアクセスする前にcountを使って配列の大きさをチェック する 2より大きいか調べる for文を利用すれば,配列中のすべてのオブジェクトにアクセスする事が できる
  10. 10. NSEnumeratorを使った オブジェクトの取得 すべてのオブジェクトにアクセスするために 列挙子と呼ばれる考え方がある インデックスを使ってアクセスする場合0番目,1番目,2番目…と オブジェクトにアクセスする まず先頭があって,その先頭から何番目という事でオブジェクトを していしている … 0 1 2 n
  11. 11. NSEnumeratorを使った オブジェクトの取得 列挙子は,まず先頭のオブジェクトを取り出す そしてそのオブジェクトから「その次」のオブジェクトを取り出す さらにその次,その次…と繰り返して行く 最後のオブジェクトに到達したら,その次としてnilを返す … nil
  12. 12. NSEnumeratorを使った オブジェクトの取得 Cocoaで列挙子を実現するクラスはNSEnumerator ここで提供するメソッドは,「その次」のオブジェクトを取り出すもの nextObjectというメソッド NSObject NSEnumerator
  13. 13. NSEnumeratorを使った オブジェクトの取得 NSEnumeratorを取得したら,このメソッドを呼び続ける それですべてのオブジェクトを取り出せる これでNSEnumeratorのインスタンスを取得できる NSEnumerator - (id)nextObject 現在のオブジェクトの次のオブジェクトを取得する NSArray - (NSEnumerator*)objectEnumerator 列挙子を取得する
  14. 14. NSEnumeratorを使った オブジェクトの取得 nextObjectメソッドを使いオブジェクトを取り出し,それをstringに 代入している そのstringに何か値が入っていればループは続き,最後のオブジェクトで nilが返ってくればループは終了する
  15. 15. 高速列挙を使った オブジェクトの取得 高速列挙(Fast Enumeration) Objective-C 2.0から追加されたオブジェクトの集合にアクセスするための 新しい文法 for文に対して拡張が行われていて,直接配列にアクセスできる 文法は for (変数宣言 in オブジェクトの集合) { ... } オブジェクトの集合としては,NSArrayなどが指定できる
  16. 16. オブジェクトの追加と削除 空の配列を作成 空の配列を作っておいて,後から尾bジェクトを追加する事もできる この場合は可変長のNSMutableArrayを使う NSArray + (id)array 中身が空のインスタンスを作成する
  17. 17. オブジェクトの追加 オブジェクトを追加するためのメソッドは NSMutableArrayで定義される NSMutableArray - (void)addObject:(id)object オブジェクトobjectを追加します - (void)addObjectFormArray:(NSArray*)array 配列arrayに含まれるすべてのオブジェクトを追加します - (void)insertObject:(id)object atIndex:(unsigned)index オブジェクトobjectをインデックスindexに追加します - (void)replaceObjectAtIndex:(unsigned)index; withObject:(id)object インデックスindexにあるオブジェクトをオブジェクトobjectと置換します - (void)setArray:(NSArray*)array すべてのオブジェクトを配列arrayに含まれているオブジェクトと交換します
  18. 18. オブジェクトの削除 「同じ値」はオブジェクトは別で,持っている値が同じもの 「同じオブジェクト」はオブジェクトを参照しているという事 NSMutableArray - (void)removeAllObject すべてのオブジェクトを削除します - (void)removeLastObject 最後のオブジェクトを削除します - (void)removeObjectAtIndex:(unsigned)index インデックスindexにあるオブジェクトを削除します - (void)removeObject:(id)object 配列に含まれるオブジェクトで,オブジェクトobjectと同じ値を持つものすべて削除します - (void)removeObjectIdenticalTo:(id)object 配列に含まれるオブジェクトで,オブジェクトobjectと同じものすべてを削除します - (void)removeObjectsInArray:(NSArray*)array 配列に含まれるオブジェクトで,配列arrayに含まれるオブジェクトと同じ値を持つものをすべて削除します
  19. 19. 辞書 辞書とは 「左が項目,右がその説明」こういう構造がプログラミングでは提供されて おり,辞書または連想配列と呼ばれている このとき指定するオブジェクトの事をキー,関連づけられたオブジェクトの 事を値と呼ぶ 例であれば CPU がキーで, Intel Core 2 Duo が値になる CPU => Intel Core 2 Duo Memory => 2GB Color => Black
  20. 20. NSDictionary NSMutableDictionary Cocoaで辞書を実現するのはNSDictionaryと, NSMutableDictionaryというクラス NSDictionaryは変更できない辞書,NSMutableDictionaryは変更できる辞書 NSDictionary NSMutable Dictionary NSObject
  21. 21. NSDictionaryの作成 1つのキーペアと値ペアを指定して作成 NSDictionary + (id)dictionaryWithObject:(id)object forkey:(id)key 値objectとキーkeyを指定して,インスタンスを作成する
  22. 22. NSDictionaryの作成 複数のキーと値のペアを指定して作成 1つ目は配列を使う方法 キーの配列と値の配列を別個に作成し,辞書を作る 2つ目は可変引数を使う方法 このメソッドでは値1,キー1,値2,キー2,...というように値とキーのペ アをどんどん並べて行く.最後の値としてnilを指定する NSDictionary + (id)dictionaryWithObjects:(NSArray*)object forKeys:(NSArray*)keys - (id)initWithObjects:(NSArray*)objects forKeys:(NSArray*)keys 値の配列objectsとキーの配列keysを指定して,インスタンスを作成する + (id)dictionaryWithObjectsAndKeys:(id)firstObj, ... - (id)initWithObjectsAndKeys:(id)firstObj, ... 値とキーのペアを複数指定して,インスタンスを作成する.最後の引数はnilにする
  23. 23. キーと値の取得 キーを指定して値を取得 辞書を引くにはキーを指定して,値を取り出さないといけない objectForKey:というメソッドを使う NSDictionary - (id)objectForKey:(id)key キーkeyを指定して,関連づけられている値を取得する.対応する値が無い場合はnilを返す
  24. 24. キーと値の取得 すべてのキー,値を取得 辞書に含まれるすべてのキーと値を取得する事もできる NSDictionary - (NSArray*)allKeys すべてのキーを配列の形で取得する - (NSEnumerator*)keyEnumerator すべてのキーにアクセスする列挙子を取得する - (NSArray*)allValues すべての値を配列の形で取得する - (NSEnumerator*)objectEnumerator すべての値にアクセスする列挙子を取得する
  25. 25. キーと値の追加と削除 空の辞書を作成 dictionaryというメソッドを使う メソッド自体はNSDictionaryで宣言されている NSDictionary + (id)dictionary 中身が空の辞書を作成する
  26. 26. キーと値の追加と削除 キーと値のペアを追加 キーを追加するにはsetObject:forKey:というメソッドを使う どちらの値もnilにならないように注意する もし指定したキーがすでに辞書に含まれていたら上書きされる 前の値は削除され,新しい値が設定される NSMutableDictionary - (void)setObject:(id)Object forKey:(id)key 値objectとキーkeyのペアをインスタンスに追加する
  27. 27. キーと値の追加と削除 キーと値のペアを削除 追加したオブジェクトを削除するのは以下のメソッド NSMutableArray - (void)removeAllobjects すべてのキーと値のペアを削除する - (void)removeObjectForKey:(id)key キーkeyと,それに関連づけられているオブジェクトを削除する - (void)removeObjectForKey:(NSArray*)keyArray キーの配列keyArrayと,それに含まれているキーに関連づけられているオブジェクトを削除する
  28. 28. ラッパークラス ラッパークラスとは NSArrayやNSDictionaryに入れる事ができるのはオブジェクトになる 整数や小数や論理値いった数値は,intやfloatやboolといった基本型を使う オブジェクトではない ラッパークラスはこれらの基本型を包んでオブジェクトとして扱えるように するためのクラス
  29. 29. NSNumber Cocoaで提供されているラッパークラスは NSNumber NSNumerにたいする操作は2つだけで事足りる 基本型からインスタンスを作る インスタンスから基本型の値を取り出す事 NSValue NSNumber NSObject
  30. 30. 基本型からインスタンスを作る メソッド NSNumber - (id)numberWithBool:(BOOL)value - (id)initWithBool:(BOOL)value 論理値の型の値valueを指定して,インスタンスを作成する + (id)numberWithChar:(char)value - (id)initWithChar:(char)value + (id)numberWithUnsignedChar:(unsigned char)value - (id)initWithUnsignedChar:(unsigned char)value 文字型の値valueを指定して,インスタンスを作成する + (id)numberWithInt:(int)value - (id)initWithInt:(int)value + (id)numberWithUnsignedInt:(unsigned int)value - (id)initWithUnsignedInt:(unsigned int)value + (id)numberWithLong:(long)value - (id)initWithLong:(long)value + (id)numberWithUnsignedLong:(unsigned long)value - (id)initWithUnsignedLong:(unsigned long)value 整数型の値valueを指定してインスタンスを作成する
  31. 31. 基本型からインスタンスを作る メソッド NSNumber + (id)numberWithFloat:(float)value - (id)initWithFloat:(float)value + (id)numberWithDouble:(double)value - (id)initWithDouble:(double)value 小数型の値valueを指定してインスタンスを作成する
  32. 32. 値を取り出すメソッド NSNumber - (BOOL)boolValue 論理値の値を取得します - (char)charValue - (unsigned char)unsignedCharValue 文字型の値を取得します - (int) intValue - (unsgned int)unsignedIntValue - (long)longValue - (unsigned long)unsignedLongValue 整数型の値を取得します - (float)floatValue - (double)doubleValue 小数型の値を取得します - (NSString*)stringValue 値を文字列にしたものを取得します

×