macOS/iOS API解説

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。2010年代に書かれた内容です。今後更新はありません。

目次

NSMutableArrayクラス

INDEX>Foundation>NSMutableArray


apple(OS X)
apple(iOS)

変更可能な配列クラス

解説

変更可能な配列クラスです

継承 NSArray : NSObject
準拠 NSCopying (NSArray)
  NSMutableCopying (NSArray)
  NSFastEnumeration (NSArray)
  NSSecureCoding (NSArray)
  NSObject (NSObject)
フレームワーク /System/Library/Frameworks/Foundation.framework
使用可能 Mac OS X v10.0 以降
iOS 2.0 以降
定義 NSArray.h
  NSPredicate.h
  NSSortDescriptor.h

概要

変更可能な配列クラスです。作成した後配列の要素を追加、削除、置き換え、並び替えなどができます。
配列に含まれる要素は、配列に含まれる際にコピーされません。上位クラスのNSArrayメソッド– initWithArray:copyItemsでcopyItemsにYESを与えた場合)を使って、各要素をコピーして配列の要素とすることができます。
各要素は配列に含まれる際にretainメッセージが送信されます。取り除かれる際にはreleaseメッセージが送信されます。

C言語フレームワークである、Core FoundationのCFMutableArrayRefとトールフリーブリッジです。ARC環境以外ではそのまま使用できます。
どちらかのフレームワークにしかないメソッド・関数を使いたい場合、キャストして使うことが出来ます。
ARC環境では、管理対象のオブジェクトのキャストに__bridge、__bridge_retained、__bridge_transferが必要になります。

作成

仮の要素数を指定して変更可能な配列を作成するメソッド+ arrayWithCapacity)があります。NSArrayの空の配列を作るメソッド+ array)を使ってNSMutableArrayを作成し、初期化するメソッド– initWithCapacity:)もあります。
仮の要素数は効率化のために最初に参考にされるのみで項目数が制限されるわけではありません、必要に応じて拡張されます。

オブジェクトの追加

変更可能な配列の末尾にオブジェクトを追加するメソッド– addObject)、末尾に別の配列の要素を追加するメソッド– addObjectsFromArray)などがあります。要素の途中にオブジェクトを一つ追加するメソッド– insertObject:atIndex)や複数のオブジェクトを追加するメソッド– insertObjects:atIndexes)があります。

配列からオブジェクトの取り除き

指定したオブジェクトと同じ内容のオブジェクトを配列から取り除くメソッド– removeObject)、指定したオブジェクトと同じオブジェクトを配列から取り除くメソッド– removeObjectIdenticalTo)があります。
– removeObjectは、同じ内容を持つオブジェクトを取り除きますが、– removeObjectIdenticalToは、指定したオブジェクトと同じアドレスを持つオブジェクトのみを取り除く所に違いがあります。

指定した範囲にあるオブジェクトを取り除くメソッド– removeObjectsInRange)があります。
似た名前のメソッドで– removeObject:inRange:というメソッドがありますが、こちらは– removeObjectの範囲限定版となります。

インデックスで指定するものとして、一つのオブジェクトを取り除くメソッド– removeObjectAtIndex)や複数のオブジェクトを取り除くメソッド– removeObjectsAtIndexes)があります。

すべての要素を取り除くメソッド– removeAllObjects)や、最後の要素のみを取り除くメソッド– removeLastObject)もあります。

配列要素の置き換え

配列の要素を別のオブジェクトと置き換えるメソッドも一つのオブジェクトを置き換えるメソッド– replaceObjectAtIndex:withObject)、複数の要素を置き換えるメソッド– replaceObjectsAtIndexes:withObjects)があります。
指定した範囲を置き換えるメソッド– replaceObjectsInRange:withObjectsFromArray)やすべての要素を別の配列の要素で置き換えるメソッド– setArray)があります。

フィルタリング

NSPredicateクラスを使って、条件に合う要素だけにするメソッド– filterUsingPredicate)があります。

    NSMutableArray *anArray = [NSMutableArray arrayWithObjects:@"aaa", @"bbb", @"ccc", @"ddd", nil];
    NSPredicate *bPredicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c] 'b'"];
    
    NSLog(@"%s  %@",__FUNCTION__,[anArray description]);
    //=>[OOOAppDelegate method005] (aaa,bbb,ccc,ddd)
    
    [anArray filterUsingPredicate:bPredicate];
    NSLog(@"%s  %@",__FUNCTION__,[anArray description]);
    //=>[OOOAppDelegate method005] (bbb)

内容の再配置

指定した番号同士を入れ替えるメソッド– exchangeObjectAtIndex:withObjectAtIndex)があります。
ソートも大きく分けて4つの方法、関数を使うメソッド– sortUsingFunction:context)、デスクリプタを使うメソッド– sortUsingDescriptors)、セレクタを使うメソッド– sortUsingSelector)、コンペレーターを使うメソッド– sortUsingComparator)があり、コンペレーターを使う方法はブロックオブジェクトを使って並列処理ができるオプションがあります。

サブクラス化の注意

ほとんどの場合、NSMutableArrayクラスをサブクラス化する必要はありません。

クラスメソッド