※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。


トップ > リファレンス > データ管理:データ型とコレクション > NSArrayクラスリファレンス

NSArray クラスリファレンス 翻訳元


このページの最終更新: 2010-02-15
ADCの最終更新:2009-11-17


継承するクラス NSObject
準拠しているプロトコル NSCoding
NSCopying
NSMutableCopying
NSFastEnumeration?
NSObject (NSObject)
フレームワーク /System/Library/Frameworks/Foundation.framework
使用可能な環境 Mac OS X v10.0以降
宣言ファイル NSArray.h
NSKeyValueCoding.h
NSKeyValueObserving.h
NSPathUtilities.h
NSPredicate.h
NSSortDescriptor.h
コンパニオンガイド Collections Programming Topics for Cocoa?
Key-Value Coding Programming Guide?
Property List Programming Guide?
Predicate Programming Guide?
サンプルコード CoreRecipes?
Quartz Composer WWDC 2005 TextEdit?
QuickLookSketch?
Sketch+Accessibility?
Sketch-112?

概観(Overview)


 NSArrayとそのサブクラスのNSMutableArray?クラスはオブジェクトの 配列 と呼ばれるコレクションを管理します。NSArrayクラスは静的配列を、NSMutableArrayクラスは動的配列を生成します。
 NSArrayクラスとNSMutableArrayクラスはNSCopyingプロトコルとNSMutableCopyingプロトコルに準拠していますが、それは配列を別の型の配列に変換するのを便利にする為です。
 NSArrayクラスとNSMutableArray?クラスはクラスクラスタの一部です。したがって、配列は正確にはNSArrayクラスやNSMutableArrayクラスのインスタンスではなく、それらの非公開のサブクラスのインスタンスです。配列のクラスが非公開でも、そのインターフェースは公開されています。なぜなら、それらの抽象スーパークラスであるNSArrayクラスとNSMutableArrayクラスで宣言されているからです。
 NSArrayクラスの二つのプリミティブメソッドであるcountメソッドとobjectAtIndex:メソッドはこのクラスのインターフェースの他のメソッドの基盤を提供します。countメソッドは配列の要素数を返し、objectAtIndex:メソッドでは配列の要素にインデックスでアクセスできます。インデックスの値は0から始まります。
 objectEnumeratorメソッドとreverseObjectEnumeratorメソッドは配列の要素に地区時的にアクセスする手段を提供します。二つのメソッド違いは、要素をたどる方向のみです。これらのメソッドがあるおかげで、配列はNSDictionaryのような他のコレクションクラスのオブジェクトで使われる方法とよく似たやり方で走査することができます。objectEnumeratorメソッドの解説のコードの例にこれらのメソッドを使って配列の要素にアクセスする方法を示してありますので、そちらをご覧ください。Mac OS v10.5以降では、高速列挙おプロトコルを使用した方がより効率的です(NSFastEnumeration?を参照してください)。
 NSArrayクラスは配列の要素に問い合わせるメソッドを提供しています。indexOfObject:メソッドは配列中のその引数と一致するオブジェクトを検索します。検索の結果を決定する為に、配列の各要素にはisEqual:メッセージが送られます。これはNSObjectプロトコルで宣言されています。その他、indexOfIdenticalTo:メソッドは配列中に指定したオブジェクトが含まれているかの決定でより特殊なケースを提供します。indexOfIdenticalTo:メソッドは配列中の書く要素のidが引数と一致するかを確認します。
 NSArrayクラスのfilteredArraysUsingPredicate:メソッドを使えば、プリディケートを使って配列を絞り込み、新たな配列を生成することができます。
 NSArrayクラスのmakeObjectsPerformSelector:メソッドとmakeObjectsPerformSelector:withObject:メソッドは配列中の全てのオブジェクトにメッセージを送信します。配列を完全に動作させる為に、他にも様々なメソッドが定義されています。配列をソートして新しい配列を生成することもできます(sortedArrayUdingSelector:sortedArrayUsingSelector:context、配列の切り出しにはsubarrayWithRange:)し、NSStringオブジェクトの要素からなる配列を一つの文字列に連結することもできます(componentsJoinedByString:)。また、isEqualToArray:メソッドやfirstObjectCommonWithArray:メソッドを使って、二つのメソッドを比較することもできます。更に、arrayByAddingObject:メソッドとarrayByAddingObjectsFromArray:メソッドを使えば既存の配列と一つかそれ以上のオブジェクトを新たに含む新しい配列を生成することもできます。
 配列はコンテンツへの強うい参照を維持しています。手動メモリ管理環境では各オブジェクトのidが配列に加えられる前にretainメッセージが送られ、配列から子害されるか、配列自体が解放された時にreleaseメッセージが送られます。もしオブジェクトの小勇健の持ち方をかえたいのであれば、代わりにCFArray Reference?NSPointerArray?NSHashTable?を使うことを検討してください。
 NSArrayクラスはCore Foundationの対応するCFArray Reference?と「toll-free bridge」です。これはキャストさえ行えば、メソッドや関数中のブリッジされたFoundationオブジェクトとCore Foundation型が交換可能であることを意味しています。したがって、API中のNSArray *パラメータにCFArrayRefを、CFArrayRefパラメータにNSArrayインスタンスを渡すことができます。このことはNSArrayクラスの具体サブクラスにも当てはまります。toll-free bridgeについての詳しい情報は、Carbon-Cocoa Integration Guideを参照してください。

サブクラス作成時の注意(Subclassing Notes)

 NSArrayクラスのサブクラスを作成する理由は通常ほとんどありません。このクラスはオブジェクトの順番を維持したコレクションを保持するように設計され、その通りによく動作します。ですが、カスタムのNSArrayオブジェクトが役に立つ場面もあります。いくつかの可能性としては、
  • NSArrayオブジェクトがコレクションに要素をストアする方法を変えたい。おそらくパフォーマンス上の理由や既存のコードとの互換性を挙げる為等が考えられます。
  • コレクションに何が起きているのかより詳しい情報を得たい。(例:[statistics gathering])
オーバーライドするメソッド(Methods to Override)
 NSArrayクラスのサブクラスは全てプリミティブインスタンスメソッドであるcountメソッドとobjectAtIndex:メソッドをオーバーライドしなくてはなりません。これらのメソッドはコレクションの要素を提供するバッキングストアを操作する必要があります。バッキングストアには静的配列や標準のNSArrayクラス、またその他のデータ型やデータ構造を使用できます。一部でも全てでも、実装を変更したいその他のNSArrayクラスのメソッドをオーバーライドすることができます。
 サブクラスが管理するバッキングストアに適したイニシャライザを実装したいと思うかもしれません。NSArrayクラスは指定イニシャライザを持っていないので、イニシャライザではスーパークラスのinitメソッドを呼ぶだけで構いません。NSArrayクラスはNSCopying、NSMutableCopying、NSCodingプロトコルに準拠しています。もしカスタムサブクラスのインスタンスを複製やコードで生成したいのであれば、これらのプロトコルのメソッドをオーバーライドしてください。
 NSArrayクラスはクラスクラスタの公開されたインターフェースであること、それがサブクラスに制限をかけることを忘れないでください。NSArrayクラスのプリミティブメソッドは指定イニシャライザを全く含んでいません。これはつまりサブクラスはストレージを提供し、そのストレージに直接作用するプリミティブメソッドを実装しなければならないということを意味しています。
特に気をつけること(Special Considerations)
 ほとんどの場合は、カスタムのNSArrayクラスはCocoaのオブジェクトの所有権の規則に従うべきです。したがって、コレクションに加えるオブジェクトにはretainメッセージを、コレクションから除外するオブジェクトにはreleaseメッセージを送る必要があります。もちろん、NSArrayクラスのサブクラスを作る目的が通常と違うオブジェクト保持の動作を実装すること(例えば保持をしない配列)であればこの限りではありません。
サブクラス作成の代わりに(Alternatives to Subclassing)
 NSArrayクラスのサブクラスを作成する前に、NSPointerArray?クラスや、NSHashTable?クラス、対応するCore Foundation型のCFArray Reference?を検討してください。 というのもNSArrayとCFArrayは「toll-free bridged」であり、コード中のNSArrayオブジェクトは(適切なキャストとともに)CFArrayオブジェクトで代用できるからです。二つは対応する型ですが、CFArrayとNSArrayは同一の実装、インターフェースを持っていないので、CFArrayでできることがNSArrayでできないということもあります。例えば、CFArrayはコールバックのセットを提供していて、そのうちのいくつかはカスタムの保持と解放の動作を実装しています。これらのコールバックの実装にNULLを指定すれば、簡単に保持しない配列を生成することができます。
 既存のクラスに追加の振る舞いを与えたいのであれば、NSArrayクラスのカテゴリを書くこともできます。ただし、カテゴリは使用中のNSArrayクラスのインスタンス全てに作用し、予想外の結果を生むこともあるということを心に留めておいてください。

採用しているプロトコル(Adopted Protocols)



このクラスでできること(Tasks)


配列の生成(Creating an Array)

        + array
        + arrayWithArray:
        + arrayWithContentsOfFile:
        + arrayWithContentsOfURL:
        + arrayWithObject:
        + arrayWithObjects:
        + arrayWithObjects:count:

配列の初期化(Initializing an Array)

        – initWithArray:
        – initWithArray:copyItems:
        – initWithContentsOfFile:
        – initWithContentsOfURL:
        – initWithObjects:
        – initWithObjects:count:

配列への問い合わせ(Querying an Array)

        – containsObject:
        – count
        – getObjects:range:
        – lastObject
        – objectAtIndex:
        – objectsAtIndexes:
        – objectEnumerator
        – reverseObjectEnumerator
        – getObjects: Deprecated in Mac OS X v10.6

配列中のオブジェクトの検索(Finding Objects in an Array)

要素へのメッセージの送信(Sending Messages to Elements)

配列の比較(Comparing Arrays)

        – firstObjectCommonWithArray:
        – isEqualToArray:

新たな配列の抽出(Deriving New Arrays)

整列(Sorting)

文字列要素の扱い(Working with String Elements)

記述の生成(Creating a Description)

        – description
        – descriptionWithLocale:
        – descriptionWithLocale:indent:
        – writeToFile:atomically:
        – writeToURL:atomically:

パスの収集(Collecting Paths)

キー値監視(Key-Value Observing)

キー値コーディング(Key-Value Coding)

        – setValue:forKey:
        – valueForKey:

クラスメソッド



インスタンスメソッド



定数(Constants)





|新しいページ|検索|ページ一覧|RSS|@ウィキご利用ガイド | 管理者にお問合せ
|ログイン|