NSArrayクラス

2014. 06. 03
・継承
NSObject

・準拠
NSCopying
NSMutableCopying
NSFastEnumeration
NSSecureCoding
NSObject (NSObject)

・フレームワーク
/System/Library/Frameworks/Foundation.framework

・利用可能
iOS 2.0以降で利用可能

・手引書
Collections Programming Topics

・宣言
NSArray.h
NSKeyValueCoding.h
NSKeyValueObserving.h
NSPathUtilities.h
NSPredicate.h
NSSortDescriptor.h



●概要

NSArrayとそのサブクラスであるNSMutableArrayは、配列と呼ばれるオブジェクトの順序付きコレクションを管理します。
NSArrayは静的な配列を、NSMutableArrayは動的な配列を作成します。
オブジェクトの順序付きコレクションが必要な時に、配列を使用することができます。

NSArrayにはCore Foundationで「toll-free bridged」に対応するCFArrayRefがあります。
toll-free bridgingの詳細については「Toll-Free Bridging」を参照してください。


サブクラス化における注意事項

NSArrayのサブクラス化をする理由は、一般的にあまりありません。
クラスはオブジェクトの順序付きコレクションを維持するように適切に設計されています。
しかしカスタムのNSArrayオブジェクトが役に立つ可能性がある状況があります。
いくつかの可能性をここに示します。
  • NSArrayでそのコレクションの要素を格納する方法を変更する。
    パフォーマンス上の理由、または旧来のコードとの互換性を高めるために行う可能性があります。

  • (統計情報の収集など)コレクションに何が起こったのかについての詳細情報を取得する。

オーバーライドするメソッド

NSArrayのサブクラスでは、プリミティブなインスタンスメソッドであるcountobjectAtIndex:をオーバーライドする必要があります。
これらのメソッドは、コレクションの要素を提供するバッキングストアで操作する必要があります。
このバッキングストアのために静的配列、標準のNSArrayオブジェクト、または他のデータ型やメカニズムを使用することができます。
また代替となる実装を提供したい場合に、他のNSArrayメソッドを部分的または完全にオーバーライドする選択をすることもできます。

サブクラスにイニシャライザを実装する場合、サブクラスが管理しているバッキングストアに適したものにする可能性があります。
その場合、イニシャライザはNSArrayクラスで指定されたイニシャライザのinitまたはinitWithObjects:count:のいずれかを呼び出す必要があります。
NSArrayクラスはNSCopying、NSMutableCopying、そしてNSCodingプロトコルを採用しているため、コピーまたはコーディンから独自のカスタムサブクラスのインスタンスを作成したい場合、これらのプロトコルのメソッドをオーバーライドします。

NSArrayはクラスクラスタのパブリックインターフェイスであり、サブクラスが何をもたらすかを覚えておいてください。
サブクラス用のストレージを提供し、ストレージに基づいて直接働くプリミティブメソッドを実装する必要があります。

サブクラス化の代替手段

NSArrayのカスタムクラスを作成する前に、NSPointerArrayや対応するCore Foundation型のCFArray Referenceを調べてください。
NSArrayとCFArrayは「toll-free bridged」なため、コード内のNSArrayオブジェクトを(適切なキャストで)CFArrayオブジェクトに置換することができます。
これらは対応している型ですが、CFArrayとNSArrayは同一のインターフェイスや実装を持っていないため、NSArrayで容易にできないことがCFArrayでできることが時々あります。
例えばCFArrayはコールバックのセットを提供しており、その内のいくつかはカスタムのretain-release動作を実装するためのものです。
これらのコールバックにNULL実装を指定した場合、非保持配列を容易に取得することができます。

既存のクラスに補足的な動作を追加したい場合、NSArrayにカテゴリを記述することができます。
ただしカテゴリは使用するNSArrayの全てのインスタンスに影響するため、意図していない結果が生ずる可能性があることを覚えておいてください。
その代わり、望む動作を獲得するための構成を使用することができます。



●タスク

●配列の作成

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

●配列の初期化

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

●配列のクエリ

– containsObject:
– count
– getObjects:range:
– firstObject
– lastObject
– objectAtIndex:
– objectAtIndexedSubscript:
– objectsAtIndexes:
– objectEnumerator
– reverseObjectEnumerator
– getObjects:    iOS 4.0では非推奨

●配列内のオブジェクトの検索

– indexOfObject:
– indexOfObject:inRange:
– indexOfObjectIdenticalTo:
– indexOfObjectIdenticalTo:inRange:
– indexOfObjectPassingTest:
– indexOfObjectWithOptions:passingTest:
– indexOfObjectAtIndexes:options:passingTest:
– indexesOfObjectsPassingTest:
– indexesOfObjectsWithOptions:passingTest:
– indexesOfObjectsAtIndexes:options:passingTest:
– indexOfObject:inSortedRange:options:usingComparator:

●要素へのメッセージの送信

– makeObjectsPerformSelector:
– makeObjectsPerformSelector:withObject:
– enumerateObjectsUsingBlock:
– enumerateObjectsWithOptions:usingBlock:
– enumerateObjectsAtIndexes:options:usingBlock:

●配列の比較

– firstObjectCommonWithArray:
– isEqualToArray:

●新規配列の導出

– arrayByAddingObject:
– arrayByAddingObjectsFromArray:
– filteredArrayUsingPredicate:
– subarrayWithRange:

●並べ替え

– sortedArrayHint
– sortedArrayUsingFunction:context:
– sortedArrayUsingFunction:context:hint:
– sortedArrayUsingDescriptors:
– sortedArrayUsingSelector:
– sortedArrayUsingComparator:
– sortedArrayWithOptions:usingComparator:

●文字列要素の操作

– componentsJoinedByString:

●内容記述の作成

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

●パスの収集

– pathsMatchingExtensions:

●キー値の監視

– addObserver:forKeyPath:options:context:
– removeObserver:forKeyPath:
– removeObserver:forKeyPath:context:
– removeObserver:fromObjectsAtIndexes:forKeyPath:context:
– addObserver:toObjectsAtIndexes:forKeyPath:options:context:
– removeObserver:fromObjectsAtIndexes:forKeyPath:

●キー値コーディング

– setValue:forKey:
– valueForKey:



●クラスメソッド

array

空の配列を作成して返します。

+ (instancetype)array

戻り値
空の配列

解説
このメソッドはNSArrayの可変サブクラスで使用されます。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


arrayWithArray:

別の指定した配列内のオブジェクトを含む配列を作成して返します。

+ (instancetype)arrayWithArray:(NSArray *)anArray

パラメータ

anArray
配列です。

戻り値
anArray内のオブジェクトを含む配列です。

解説
このメソッドはNSArrayの可変サブクラスで使用されます。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


arrayWithContentsOfFile:

指定したパスで指定されたファイルのコンテンツに含まれている配列を作成して返します。

+ (id)arrayWithContentsOfFile:(NSString *)aPath

パラメータ

aPath
writeToFile:atomically:メソッドで生成される配列の文字列表現含むファイルへのパスです。

戻り値
aPathで指定されたファイルのコンテンツを含む配列です。
ファイルが開けない、またはファイルのコンテンツが配列に解析できない場合はnilを返します。

解説
aPathで識別されるファイル内の配列表現は、プロパティリストオブジェクト(NSString、NSData、NSDate、NSNumber、NSArray、またはNSDictionaryオブジェクト)のみ含まれている必要があります。
詳細についてはProperty List Programming Guideを参照してください。
この配列に含まれるオブジェクトは、配列が可変であっても不変になります。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


arrayWithObject:

指定したオブジェクトを含む配列を作成して返します。

+ (instancetype)arrayWithObject:(id)anObject

パラメータ

anObject
オブジェクトです。

戻り値
単一要素anObjectを含む配列です。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


arrayWithObjects:

引数リスト内のオブジェクトを含む配列を作成して返します。

+ (instancetype)arrayWithObjects:(id)firstObj,,...

パラメータ

firstObj, ...
nil終端のオブジェクトのコンマ区切りのリストです。

戻り値
引数リストのオブジェクトを含む配列です。

解説
以下のコードは3つの異なる型の要素を含む配列の作成例です。

NSArray *myArray;
NSDate *aDate = [NSDate distantFuture];
NSValue *aValue = [NSNumber numberWithInt:5];
NSString *aString = @"a string";

myArray = [NSArray arrayWithObjects:aDate, aValue, aString, nil]; 

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h



●インスタンスメソッド

containsObject:

指定したオブジェクトが配列に含まれているかどうかを示すブール値を返します。

- (BOOL)containsObject:(id)anObject

パラメータ

anObject
オブジェクトです。

戻り値
配列にanObjectが含まれている場合はYES、それ以外の場合はNOです。

解説
このメソッドは各配列のオブジェクトにisEqual:メッセージを送信する(そして各isEqual:メッセージにパラメータとしてanObjectを渡す)ことによって、anObjectが配列内に含まれているかどうかを決定します。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


count

現在の配列内のオブジェクト数を返します。

- (NSUInteger)count

戻り値
現在の配列内のオブジェクト数です。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


indexOfObject:

指定したオブジェクトと等しい値の、対応する配列の最少インデックスを返します。

- (NSUInteger))indexOfObject:(id)anObject

パラメータ

anObject
オブジェクトです。

戻り値
anObjectと等しい値の、対応する配列の最少インデックスです。
配列内にanObjectと等しいオブジェクトが無い場合、NSNotFoundを返します。

解説
インデックスは0から始まり、一致するものが見つかるか配列の最後まで到達するまで、配列内の各要素にisEqual:メッセージを送信します。
このメソッドは、各isEqual:メッセージにanObjectパラメータを渡します。
オブジェクトは
NSObjectプロトコルで宣言されている)isEqual:がYESを返した場合、オブジェクトは等しいと見なされます。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


initWithContentsOfFile:

指定したパスのファイルのコンテンツで、新たに割り当てた配列を初期化します。

- (id)initWithContentsOfFile:(NSString *)aPath

パラメータ

aPath
writeToFile:atomically:メソッドによって生成された配列の表現を含むファイルへのパスです。

戻り値
aPathで指定されたファイルのコンテンツを含む初期化された配列、あるいはファイルが開けなかったかファイルのコンテンツで配列を解析できなかった場合はnilを返します。
返されるオブジェクトは元のレシーバとは異なる場合があります。

解説
aPathで識別されるファイル内の配列表現は、プロパティリストオブジェクト(NSString、NSData、NSNumber、NSArray、またはNSDictionaryオブジェクト)のみ含まれている必要があります。
この配列に含まれるオブジェクトは、配列が可変であっても不変になります。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


initWithObjects:

引数リスト内にオブジェクトを配置することによって、新たに割り当てた配列を初期化します。

- (instancetype)initWithObjects:(id)firstObj,,...

パラメータ

firstObj,...
nil終端のオブジェクトのコンマ区切りのリストです。

戻り値
引数リストオブジェクトを含むように初期化された配列です。
返されるオブジェクトは元のレシーバとは異なる場合があります。

解説
この方法で初期化した不変配列は、後に変更を加えることはできません。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


lastObject

配列内の最後のオブジェクトを返します。

- (id)lastObject

戻り値
配列内の最後のオブジェクトです。
配列が空の場合はnilを返します。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


objectAtIndex:

指定したインデックスの場所にあるオブジェクトを返します。

- (id)objectAtIndex:(NSUInteger)index

パラメータ

index
配列の範囲内のインデックスです。

戻り値
indexにあるオブジェクトです。

解説
indexが配列の最後を超える(つまりindexがcountで返される値と等しいか大きい)場合はNSRangeExceptionが発生します。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


sortedArrayUsingSelector:

指定したセレクタの比較メソッドによる決定方法で、受信側の配列要素を昇順に並べた配列を返します。

- (NSArray *)sortedArrayUsingSelector:(SEL)comparator

パラメータ

comparator
一度に2つの要素を比較するために使用するメソッド識別するセレクタです。
メソッドは受信側の配列が引数より小さい場合はNSOrderedAscendingを、大きい場合はNSOrderedDescending、等しければNSOrderedSameを返します。

戻り値
指定したセレクタcomparatorの比較メソッドによる決定方法で、受信側の配列要素を昇順に並べた配列です。

解説
新しい配列は受信側の配列要素への参照が含まれており、コピーではありません。

comparatorメッセージは配列内の各オブジェクトに送信され、単一の引数として配列内の別のオブジェクトを持ちます。

例えばNSStringオブジェクトの配列では、NSStringクラスで宣言されているcaseInsensitiveCompare:メソッドを使用することによって並べ替えることができます。
anArrayが存在すると仮定した場合、以下の方法で配列の並べ替えたバージョンを作成することができます。

NSArray *sortedArray = [anArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


writeToFile:atomically:

指定したパスにあるファイルに配列のコンテンツを書き出します。

- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag

パラメータ

path
配列のコンテンツを書き出すパスです。
pathにチルダ(~)が含まれている場合は、このメソッドを呼び出す前にstringByExpandingTildeInPathで展開する必要があります。

flag
YESの場合、配列は一旦補助ファイルに書き込まれ、その後補助ファイルがパス名に書き換えられます。
NOの場合、配列はパスに直接書き込まれます。
YESオプションはpathを保証し、仮にシステムが書き込み中にクラッシュした場合でも破壊されません。

戻り値
ファイルの書き込みが成功した場合はYES、それ以外はNOです。

解説
配列のコンテンツが全てプロパティリストオブジェクト(NSString、NSData、NSArray、またはNSDictionaryオブジェクト)の場合、このメソッドで書き込まれるファイルにはクラスメソッドarrayWithContentsOfFile:またはインスタンスメソッドinitWithContentsOfFile:を使用することができます。
このメソッドは、ファイルに書き出す前に含まれている全てのオブジェクトがプロパティリストオブジェクトであることを再帰的に検証し、全てのオブジェクトがプロパティリストオブジェクトでない場合、結果ファイルが有効なプロパティリストではないためNOを返します。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h



●定数



参考文献

NSArray Class Reference






Bose QuietComfort 20
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
08 | 2017/09 | 10
Sun Mon Tue Wed Thu Fri Sat
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

Bose QuietComfort 20
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR