Class

NSArray

A static ordered collection of objects. オブジェクトそれらからなる静的順序コレクション。

Declaration 宣言

@interface NSArray<__covariant ObjectType> : NSObject

Overview 概要

NSArray and its subclass NSMutableArray manage ordered collections of objects called arrays. NSArray creates static arrays, and NSMutableArray creates dynamic arrays. You can use arrays when you need an ordered collection of objects. NSArrayとそれのサブクラスNSMutableArrayは、オブジェクトの順番付けられたコレクション、 配列(array)と呼ばれるものを管理します。NSArrayは静的な配列を作成します、そしてNSMutableArrayは動的な配列を作成します。あなたは、オブジェクトの順番付けられたコレクションが必要な時に配列を使うことができます。

NSArray is “toll-free bridged” with its Core Foundation counterpart, CFArrayRef. See Toll-Free Bridging for more information on toll-free bridging. NSArrayは、それのCore Foundation相当物、CFArrayRefと「トールフリーブリッジ」されます。トールフリーブリッジに関する更なる情報としてToll-Free Bridgingを見てください。

Creating NSArray Objects Using Array Literals NSArrayオブジェクトを配列リテラルを使って作成する

In addition to the provided initializers, such as initWithObjects:, you can create an NSArray object using an array literal. 提供されたイニシャライザ、例えばinitWithObjects:などに加えて、あなたはNSArrayオブジェクトを配列リテラルを使って作成できます。


NSArray *array = @[someObject, @"Hello, World!", @42];

In Objective-C, the compiler generates code that makes an underlying call to the arrayWithObjects:count: method. Objective-Cでは、コンパイラがarrayWithObjects:count:メソッドへの隠れた呼び出しをするコードを生成します。


id objects[] = { someObject, @"Hello, World!", @42 };
NSUInteger count = sizeof(objects) / sizeof(id);
NSArray *array = [NSArray arrayWithObjects:objects
                                     count:count];

You should not terminate the list of objects with nil when using this literal syntax, and in fact nil is an invalid value. For more information about object literals in Objective-C, see Working with Objects in Programming with Objective-C. あなたは、このリテラル構文を使う時にオブジェクトのリストをnilで終端すべきではありません、そして実際nilは無効な値です。Objective-Cにおけるオブジェクトリテラルについてのさらなる情報として、Working with ObjectsProgramming with Objective-Cでみてください。

In Swift, the NSArray class conforms to the ArrayLiteralConvertible protocol, which allows it to be initialized with array literals. For more information about object literals in Swift, see Literal Expression in The Swift Programming Language (Swift 4.1). Swiftでは、NSArrayクラスはArrayLiteralConvertibleプロトコルに準拠します、そのことはそれが配列リテラルで初期化されることを可能にします。Swiftにおけるオブジェクトリテラルについての更なる情報としてリテラル式Swiftプログラミング言語(Swift 4.1)で見てください。

Accessing Values Using Subscripting 添え字を使って値にアクセスする

In addition to the provided instance methods, such as objectAtIndex:, you can access NSArray values by their indexes using subscripting. 提供されたインスタンスメソッド、例えばobjectAtIndex:などに加えて、あなたはNSArray値にアクセスすることがそれらのインデックスによって添え字を使うことで可能です。


id value = array[3];

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

There is typically little reason to subclass NSArray. The class does well what it is designed to do—maintain an ordered collection of objects. But there are situations where a custom NSArray object might come in handy. Here are a few possibilities: NSArrayのサブクラスを作る理由は一般的にほとんどありません。クラスは、それが行うように設計されたこと—オブジェクトの順番付けられたコレクションの保守—を適切に実行します。しかしあつらえのNSArrayオブジェクトが便利かもしれない場面があります。ここに少しばかりの可能性があります:

  • Changing how NSArray stores the elements of its collection. You might do this for performance reasons or for better compatibility with legacy code. NSArrayがそれのコレクションの要素を格納する方法を変える。あなたはこれを性能上の理由のためにまたはレガシーコードとのより良い互換性のために行います。

  • Acquiring more information about what is happening to the collection (for example, statistics gathering). コレクションに何が起こっているかについてもっと情報を取得する(例えば、統計を取る)。

Methods to Override メソッドのオーバーライド

Any subclass of NSArray must override the primitive instance methods count and objectAtIndex:. These methods must operate on the backing store that you provide for the elements of the collection. For this backing store you can use a static array, a standard NSArray object, or some other data type or mechanism. You may also choose to override, partially or fully, any other NSArray method for which you want to provide an alternative implementation. これらのメソッドは、あなたがコレクションの要素に対して提供するバッキングストア上で演算を行わなければなりません。このバッキングストアに対してあなたは、静的配列、標準的NSArrayオブジェクト、または何か他のデータ型もしくは仕組みを使うことができます。あなたはまた、それに対してあなたが代替の実装を提供することを望む他のあらゆるNSArrayメソッドを、部分的にまたは完全に、オーバーライドすることを選べます。

You might want to implement an initializer for your subclass that is suited to the backing store that the subclass is managing. If you do, your initializer must invoke one of the designated initializers of the NSArray class, either init or initWithObjects:count:. The NSArray class adopts the NSCopying, NSMutableCopying, and NSCoding protocols; custom subclasses of NSArray should override the methods in these protocols as necessary. あなたは、あなたのサブクラスに対して、そのサブクラスを管理しているバッキングストアに適したイニシャライザを実装したいかもしれません。あなたがそうするならば、あなたのイニシャライザはNSArrayクラスの指定イニシャライザの1つ、initまたはinitWithObjects:count:どちらかを発動しなければなりません。NSArrayクラスは、NSCopyingNSMutableCopying、そしてNSCodingプロトコルを採用します;NSArrayのカスタムサブクラスは、必要に応じてこれらのプロトコルにおいてメソッドをオーバーライドすべきです。

Remember that NSArray is the public interface for a class cluster and what this entails for your subclass. You must provide the storage for your subclass and implement the primitive methods that directly act on that storage. NSArrayはクラスクラスタに対するパブリックインターフェイスであること、そしてあなたのサブクラスに課せられるのは何かを忘れないでください。あなたは、あなたのサブクラスに対してストレージを提供して、そのストレージ上で直に役割を果たす根本的メソッドを実装しなければなりません。

Alternatives to Subclassing サブクラス作成の代わりとなるもの

Before making a custom subclass of NSArray, investigate NSPointerArray and the corresponding Core Foundation type, CFArray. Because NSArray and CFArray are “toll-free bridged,” you can substitute a CFArray object for a NSArray object in your code (with appropriate casting). Although they are corresponding types, CFArray and NSArray do not have identical interfaces or implementations, and you can sometimes do things with CFArray that you cannot easily do with NSArray. For example, CFArray provides a set of callbacks, some of which are for implementing custom retain-release behavior. If you specify NULL implementations for these callbacks, you can easily get a non-retaining array. NSArrayのカスタムクラスを作る前に、NSPointerArrayと対応するCore Foundation型、CFArrayを調べて見てください。NSArrayCFArrayは、「toll-freeブリッジ」されるので、あなたは、あなたのコードにおいて(適切なキャストを行うことで)CFArrayオブジェクトをNSArrayオブジェクトの代わりにすることができます。とは言えそれらが対応している型であっても、CFArrayNSArrayは全く同一のインターフェイスや実装を持ちません、そしてあなたは時々CFArrayを使って、あなたがNSArrayでは簡単にはできないような事を行えます。例えば、CFArrayはひとそろいのコールバックを提供します、それらの幾つかはカスタム「保持-解放」挙動を実装するためのものです。あなたがNULL実装をこれらのコールバックに対して指定するならば、あなたは非保持(非リテイン)配列を簡単に得ることができます。

If the behavior you want to add supplements that of the existing class, you could write a category on NSArray. Keep in mind, however, that this category will be in effect for all instances of NSArray that you use, and this might have unintended consequences. Alternatively, you could use composition to achieve the desired behavior. あなたが望む挙動が既存のクラスのそれの補遺を追加する場合、あなたはNSArray上でカテゴリを書くことができます。しかしながら、このカテゴリはあなたが使うNSArrayインスタンス全てに対して発効になるのを心してください、そしてこれは意図しない成り行きをもたらすかもしれません。あるいは、あなたは望む挙動を達成するためにコンポジション(合成)を使うことができます。

Topics 話題

Creating an Array 配列の作成

Initializing an Array 配列の初期化

Querying an Array 配列に問い合わせる

Finding Objects in an Array 配列内のオブジェクトを見つける

Sending Messages to Elements 要素にメッセージを送る

Comparing Arrays 配列を比較する

Deriving New Arrays 新しい配列を派生させる

Sorting ソートする

Working with String Elements 文字列要素を扱う

Creating a Description 記述を作成する

Storing Arrays 配列をソートする

Collecting Paths パスを集める

Key-Value Observing キー値監視する

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

Randomly Shuffling an Array 配列を無作為にシャッフルする

Comparing with Another Array 別の配列とを比較する

New Methods 新しいメソッド

Constants 定数

Initializers イニシャライザ

Instance Methods インスタンス メソッド

Type Methods 型メソッド

Relationships 関係

Inherits From 継承元

See Also 参照

Basic Collections 基本コレクション