NSDictionary クラスリファレンス 翻訳元
このページの最終更新:2010-02-24
ADCの最終更新:2009-08-28
ADCの最終更新:2009-08-28
継承するクラス | NSObject |
準拠しているプロトコル | NSCoding NSCopying NSMutableCopying NSFastEnumeration? NSObject (NSObject) |
フレームワーク | /System/Library/Frameworks/Foundation.framework? |
使用可能な環境 | Mac OS X v10.0以降 |
宣言ファイル | NSDictionary.h NSFileManager.h NSKeyValueCoding.h |
コンパニオンガイド | Collections Programming Topics for Cocoa? Property List Programming Guide? |
サンプルコード | From A View to A Movie? From A View to A Picture? People? QTCoreVideo301? Quartz Composer WWDC 2005 TextEdit? |
概観(Overview)
NSDictionaryクラスはオブジェクトをキーと値の対で管理する変更不能なプログラマティックインターフェースを宣言しています。このクラス、また必要によりサブクラスのNSMutableDictionaruクラスを使うことによって、任意のキーに関連づけられたデータを効率的に取得することができます。(ここでは便宜的に、辞書という単語を実際のクラスに関係なくこれらのサブクラスのうちの一つのクラスのインスタンスをさす言葉として使います。)
辞書中のキーと値のペアはエントリと呼ばれます。それぞれのエントリはキーを表す一つ目のオブジェクトと、そのキーに対応する値である二つ目のオブジェクトから成り立ちます。辞書では、キーは一意的なものです。つまり、一つの辞書中に、等しい(link_anchor plugin error : idが指定されていないか、存在しないページを指定しています。メソッドによって決定される)二つのキーは存在しません。通常、どんな(NSCopyingプロトコルに準拠している——以下を参照)オブジェクトでもキーになり得ます。しかし、キー値コーディングを使用する時はキーは文字列でなければならない(Key-Value Coding Fundaentals?を参照してください)ことに注意してください。nilはキーや値になりえません。辞書中で空の値を表現したい時は、NSNullオブジェクトを使用してください。
NSDictionaryのインスタンスは変更不能な辞書です。そのインスタンスのエントリは生成時に決定し、それ以後は変更できません。NSMutableDictionary?のインスタンスは変更可能な辞書です。このインスタンスではいつでもエントリを追加したり削除したりでき、メモリも必要に応じて自動的に確保されます。辞書クラスはNSCopyingとNSMutableCopyingプロトコルに準拠し、辞書間での型変換を容易にしています。
NSDictionaryとNSMutableDictionaryはクラスクラスタの一部です。つまり、このインターフェースから生成したオブジェクトは正確にはこれら二つのクラスのインスタンスではありません。もっと適切に言えば、これらのインスタンスはこれらの非公開なサブクラスのインスタンスです。辞書のクラスは非公開ですが、そのインターフェースは公開されています。なぜなら、インターフェースは抽象スーパークラスであるNSDictionaryとNSMutableDictionaryで宣言されているからです。
内部的には、辞書はストレージの構成と与えられたキーに対応する値に素早くアクセスする為にハッシュテーブルを使っています。しかし、このクラス群で定義されているメソッドはハッシュテーブルやハッシュ関数、ハッシュされたキーの複雑な働きを隠蔽しています。以下で定義されているメソッドではキーを直接用い、ハッシュされた形では用いません。
辞書にエントリを追加するメソッドは、(全ての辞書の)初期化の過程や(変更可能な辞書の)変更の過程であるかにかかわらず引数のキーをコピーし(キーはNSCopyingプロトコルに準拠しなければなりません)、その複製を辞書に加えます。それぞれに対応する値には辞書の使用中に解放されないことを保証する為にlink_anchor plugin error : idが指定されていないか、存在しないページを指定しています。メッセージが送られます。
辞書中のキーと値のペアはエントリと呼ばれます。それぞれのエントリはキーを表す一つ目のオブジェクトと、そのキーに対応する値である二つ目のオブジェクトから成り立ちます。辞書では、キーは一意的なものです。つまり、一つの辞書中に、等しい(link_anchor plugin error : idが指定されていないか、存在しないページを指定しています。メソッドによって決定される)二つのキーは存在しません。通常、どんな(NSCopyingプロトコルに準拠している——以下を参照)オブジェクトでもキーになり得ます。しかし、キー値コーディングを使用する時はキーは文字列でなければならない(Key-Value Coding Fundaentals?を参照してください)ことに注意してください。nilはキーや値になりえません。辞書中で空の値を表現したい時は、NSNullオブジェクトを使用してください。
NSDictionaryのインスタンスは変更不能な辞書です。そのインスタンスのエントリは生成時に決定し、それ以後は変更できません。NSMutableDictionary?のインスタンスは変更可能な辞書です。このインスタンスではいつでもエントリを追加したり削除したりでき、メモリも必要に応じて自動的に確保されます。辞書クラスはNSCopyingとNSMutableCopyingプロトコルに準拠し、辞書間での型変換を容易にしています。
NSDictionaryとNSMutableDictionaryはクラスクラスタの一部です。つまり、このインターフェースから生成したオブジェクトは正確にはこれら二つのクラスのインスタンスではありません。もっと適切に言えば、これらのインスタンスはこれらの非公開なサブクラスのインスタンスです。辞書のクラスは非公開ですが、そのインターフェースは公開されています。なぜなら、インターフェースは抽象スーパークラスであるNSDictionaryとNSMutableDictionaryで宣言されているからです。
内部的には、辞書はストレージの構成と与えられたキーに対応する値に素早くアクセスする為にハッシュテーブルを使っています。しかし、このクラス群で定義されているメソッドはハッシュテーブルやハッシュ関数、ハッシュされたキーの複雑な働きを隠蔽しています。以下で定義されているメソッドではキーを直接用い、ハッシュされた形では用いません。
辞書にエントリを追加するメソッドは、(全ての辞書の)初期化の過程や(変更可能な辞書の)変更の過程であるかにかかわらず引数のキーをコピーし(キーはNSCopyingプロトコルに準拠しなければなりません)、その複製を辞書に加えます。それぞれに対応する値には辞書の使用中に解放されないことを保証する為にlink_anchor plugin error : idが指定されていないか、存在しないページを指定しています。メッセージが送られます。
列挙(Enumeration)
辞書のコンテンツはlink_anchor plugin error : idが指定されていないか、存在しないページを指定しています。やlink_anchor plugin error : idが指定されていないか、存在しないページを指定しています。によって返されるNSEnumeratorを使ってそれぞれキー、値を列挙することができます。Mac OS X v10.5以降上では、NSDictionaryはNSFastEnumeration?プロトコルをサポートしていますので、for...in構文を使って辞書中のキーを列挙することができます。以下の例で説明します。
NSArray *keys = [NSArray arrayWithObjects:@"key1", @"key2", @"key3", nil]; NSArray *objects = [NSArray arrayWithObjects:@"value1", @"value2", @"value3", nil]; NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; for (id key in dictionary) { NSLog(@"key: %@, value: %@", key, [dictionary objectForKey:key]); } |
Mac OS X v10.6以降では、NSDictionaryはブロックオブジェクトを使用した列挙をサポートしています。
プリミィティブメソッド(Primitive Methods)
NSDictionaryの3つのプリミィティブメソッドである、link_anchor plugin error : idが指定されていないか、存在しないページを指定しています。、link_anchor plugin error : idが指定されていないか、存在しないページを指定しています。、link_anchor plugin error : idが指定されていないか、存在しないページを指定しています。はこのインターフェース中の他のメソッドの基礎を提供しています。link_anchor plugin error : idが指定されていないか、存在しないページを指定しています。メソッドは辞書中のエントリの数を返します。link_anchor plugin error : idが指定されていないか、存在しないページを指定しています。は与えられたキーに関連づけられた値を返します。link_anchor plugin error : idが指定されていないか、存在しないページを指定しています。は辞書中のキーを順番に参照する為のオブジェクトを返します。ここで宣言されているその他のメソッドはこれらのメソッドを一回、またはそれ以上呼び出して動作しています。プリミティブメソッド以外のメソッドは、一度に複数のエントリにアクセスする便利な手段を提供します。
記述と永続性(Desctiptions and Persistance)
プロパティリスト形式で文字列やファイルに書き出すには、それぞれdescription...やlink_anchor plugin error : idが指定されていないか、存在しないページを指定しています。メソッドが使用できます。これらをカスタムデータオブジェクトのストレージの永続化に使用するのは一般的には推奨されません。代替手段としてはArchives and Serializations Programming Guide for Cocoa?を参照してください。
Toll-Freeブリッジ(Toll-Free Bridging)
NSDictionaryは対応するCore FoundationのCFDictionary Reference?と「toll-freeブリッジ」です。つまり、関数やメソッド中のCore Foundation型はブリッジしているFoundationオブジェクトと相互に交換可能だということです。したがって、メソッド中のNSDictionary *パラメータにCFDictionaryRefを渡すことも、CFDictionaryRefパラメータにNSDicationaryインスタンスを渡すこともできます(コンパイル時の警告を押さえるにはその型にキャストします)。このブリッジはNSDictionaryの具体サブクラスにも適用されます。toll-freeブリッジについての詳細はInterchangeable Data Typesを参照してください。
採用しているプロトコル(Adopted Protocols)
NSCoding
– encodeWithCoder:
– initWithCoder:
NSCopying
– copyWithZone:
NSMutableCopying
– mutableCopyWithZone:
NSFastEnumeration?
– countByEnumeratingWithState:objects:count:
– encodeWithCoder:
– initWithCoder:
NSCopying
– copyWithZone:
NSMutableCopying
– mutableCopyWithZone:
NSFastEnumeration?
– countByEnumeratingWithState:objects:count:
このクラスでできること(Tasks)
辞書の生成(Creating a Dictionary)
+ dictionary
+ dictionaryWithContentsOfFile:
+ dictionaryWithContentsOfURL:
+ dictionaryWithDictionary:
+ dictionaryWithObject:forKey:
+ dictionaryWithObjects:forKeys:
+ dictionaryWithObjects:forKeys:count:
+ dictionaryWithObjectsAndKeys:
+ dictionaryWithContentsOfFile:
+ dictionaryWithContentsOfURL:
+ dictionaryWithDictionary:
+ dictionaryWithObject:forKey:
+ dictionaryWithObjects:forKeys:
+ dictionaryWithObjects:forKeys:count:
+ dictionaryWithObjectsAndKeys:
NSDictionaryインスタンスの初期化(Initializing an NSDictionary Instance)
– initWithContentsOfFile:
– initWithContentsOfURL:
– initWithDictionary:
– initWithDictionary:copyItems:
– initWithObjects:forKeys:
– initWithObjects:forKeys:count:
– initWithObjectsAndKeys:
– initWithContentsOfURL:
– initWithDictionary:
– initWithDictionary:copyItems:
– initWithObjects:forKeys:
– initWithObjects:forKeys:count:
– initWithObjectsAndKeys:
エントリの数え上げ(Counting Entries)
辞書の比較(Comparing Dictionaries)
キーや値へのアクセス(Accessing Keys and Values)
– allKeys
– allKeysForObject:
– allValues
– getObjects:andKeys:
– objectForKey:
– objectsForKeys:notFoundMarker:
– valueForKey:
– allKeysForObject:
– allValues
– getObjects:andKeys:
– objectForKey:
– objectsForKeys:notFoundMarker:
– valueForKey:
辞書の列挙(Enumerating Dictionaries)
– keyEnumerator
– objectEnumerator
– enumerateKeysAndObjectsUsingBlock:
– enumerateKeysAndObjectsWithOptions:usingBlock:
– objectEnumerator
– enumerateKeysAndObjectsUsingBlock:
– enumerateKeysAndObjectsWithOptions:usingBlock:
辞書の整理(Sorting Dictionaries)
– keysSortedByValueUsingSelector:
– keysSortedByValueUsingComparator:
– keysSortedByValueWithOptions:usingComparator:
– keysSortedByValueUsingComparator:
– keysSortedByValueWithOptions:usingComparator:
辞書の濾過(Filtering Dictionaries)
辞書のストア(Storing Dictionaries)
ファイル属性へのアクセス(Accessing File Attributes)
– fileCreationDate
– fileExtensionHidden
– fileGroupOwnerAccountID
– fileGroupOwnerAccountName
– fileHFSCreatorCode
– fileHFSTypeCode
– fileIsAppendOnly
– fileIsImmutable
– fileModificationDate
– fileOwnerAccountID
– fileOwnerAccountName
– filePosixPermissions
– fileSize
– fileSystemFileNumber
– fileSystemNumber
– fileType
– fileExtensionHidden
– fileGroupOwnerAccountID
– fileGroupOwnerAccountName
– fileHFSCreatorCode
– fileHFSTypeCode
– fileIsAppendOnly
– fileIsImmutable
– fileModificationDate
– fileOwnerAccountID
– fileOwnerAccountName
– filePosixPermissions
– fileSize
– fileSystemFileNumber
– fileSystemNumber
– fileType
記述の生成(Creating a Description)
– description
– descriptionInStringsFileFormat
– descriptionWithLocale:
– descriptionWithLocale:indent:
– descriptionInStringsFileFormat
– descriptionWithLocale:
– descriptionWithLocale:indent: