macOS/iOS API解説

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

目次

Application Kit

Application Kitフレームワーク

http://d.hatena.ne.jp/jjj777/10010218
に移動しました。

解説

Cocoaアプリケーションの主にGUIを担当するフレームワークです。

フレームワーク /System/Library/Frameworks/AppKit.framework
ヘッダファイル /System/Library/Frameworks/AppKit.framework/Headers

概要

使用可能

10.0

クラス

CIColor Additions
CIImage Additions
NSActionCell
NSAffineTransform Additions
NSAlert
NSAnimation
NSAnimationContext
NSAppleScript Additions
NSApplication
NSArrayController
NSATSTypesetter
NSAttributedString Application Kit Additions
NSBezierPath
NSBitmapImageRep
NSBox
NSBrowser
NSBrowserCell
NSBundle Additions
NSButton
NSButtonCell
NSCachedImageRep
NSCell
NSCIImageRep
NSClipView
NSCoder Application Kit Additions
NSCollectionView
NSCollectionViewItem
NSColor
NSColorList
NSColorPanel
NSColorPicker
NSColorSpace
NSColorWell
NSComboBox
NSComboBoxCell
NSControl
NSController
NSCursor
NSCustomImageRep
NSDatePicker
NSDatePickerCell
NSDictionaryController
NSDockTile
NSDocument
NSDocumentController
NSDrawer
NSEPSImageRep
NSEvent
NSFileWrapper
NSFont
NSFontDescriptor
NSFontManager
NSFontPanel
NSForm
NSFormCell
NSGlyphGenerator
NSGlyphInfo
NSGradient
NSGraphicsContext
NSHelpManager
NSImage
NSImageCell
NSImageRep
NSImageView
NSInputManager
NSInputServer
NSLayoutManager
NSLevelIndicator
NSLevelIndicatorCell
NSMatrix
NSMenu
NSMenuItem
NSMenuItemCell
NSMenuView
NSMovie (Deprecated)
NSMovieView (Deprecated)
NSMutableAttributedString Additions
NSMutableParagraphStyle
NSNib
NSNibConnector
NSNibControlConnector
NSNibOutletConnector
NSObjectController
NSOpenGLContext
NSOpenGLPixelBuffer
NSOpenGLPixelFormat
NSOpenGLView
NSOpenPanel
NSOutlineView
NSPageLayout
NSPanel
NSParagraphStyle
NSPasteboard
NSPathCell
NSPathComponentCell
NSPathControl
NSPDFImageRep
NSPersistentDocument
NSPICTImageRep
NSPopUpButton
NSPopUpButtonCell
NSPredicateEditor
NSPredicateEditorRowTemplate
NSPrinter
NSPrintInfo
NSPrintOperation
NSPrintPanel
NSProgressIndicator
NSQuickDrawView
NSResponder
NSRuleEditor
NSRulerMarker
NSRulerView
NSSavePanel
NSScreen
NSScroller
NSScrollView
NSSearchField
NSSearchFieldCell
NSSecureTextField
NSSecureTextFieldCell
NSSegmentedCell
NSSegmentedControl
NSShadow
NSSimpleHorizontalTypesetter (Deprecated)
NSSlider
NSSliderCell
NSSound
NSSpeechRecognizer
NSSpeechSynthesizer
NSSpellChecker
NSSplitView
NSStatusBar
NSStatusItem
NSStepper
NSStepperCell
NSString Application Kit Additions
NSTableColumn
NSTableHeaderCell
NSTableHeaderView
NSTableView
NSTabView
NSTabViewItem
NSText
NSTextAttachment
NSTextAttachmentCell
NSTextBlock
NSTextContainer
NSTextField
NSTextFieldCell
NSTextList
NSTextStorage
NSTextTab
NSTextTable
NSTextTableBlock
NSTextView
NSTokenField
NSTokenFieldCell
NSToolbar
NSToolbarItem
NSToolbarItemGroup
NSTrackingArea
NSTreeController
NSTreeNode
NSTypesetter
NSURL Additions
NSUserDefaultsController
NSView
NSViewAnimation
NSViewController
NSWindow
NSWindowController
NSWorkspace


プロトコル

NSAccessibility
NSAnimatablePropertyContainer
NSChangeSpelling
NSColorPickingCustom
NSColorPickingDefault
NSComboBoxCellDataSource
NSComboBoxDataSource
NSDictionaryControllerKeyValuePair
NSDraggingDestination
NSDraggingInfo
NSDraggingSource
NSEditor
NSEditorRegistration
NSFontPanelValidation
NSGlyphStorage
NSIgnoreMisspelledWords
NSInputServerMouseTracker
NSInputServiceProvider
NSKeyValueBindingCreation
NSMenuValidation
NSNibAwaking
NSOutlineViewDataSource
NSPathCellDelegate
NSPathControlDelegate
NSPlaceholders
NSPrintPanelAccessorizing
NSServicesRequests
NSTableDataSource
NSTextAttachmentCell
NSTextInput
NSTextInputClient
NSToolbarItemValidation
NSToolTipOwner
NSUserInterfaceValidations
NSValidatedUserInterfaceItem
NSWindowScripting

NSRegularExpressionクラス

INDEX>Foundation>NSRegularExpression

apple(OS X)
apple(iOS)

解説

正規表現クラス

継承 NSObject
準拠 NSCoding
NSCopying
NSObject (NSObject)
フレームワーク /System/Library/Frameworks/Foundation.framework
使用可能 OS X 10.7以降
iOS 4.0以降
定義 NSRegularExpression.h

概要

本クラスについて

正規表現と呼ばれる式を使ってテキストを検索・置換するメカニズムがありそれを実現するクラスです。
Unicode用国際化コンポーネントICU正規表現コー
文字列の中から特定のパターン検索しその部分を置換することができます。たとえばhttp://www...とある部分を探し出してその部分をリンクとして認識させるような場合の文字の抽出に使うことができます。
サンプルにもありますが URLのクエリー?aaa=100&bbb=200の取り出しなどにも使うことができます。

正規表現クラスの作成

テキストで正規表現クラスを作成するには(+ regularExpressionWithPattern:options:error)メソッドを使用します。allocで作成した正規表現クラスを初期化するには(– initWithPattern:options:error)メソッドを使用します。

正規表現を使って、URLのxxx=xxxという部分を取り出すサンプル

#pragma mark -enumerateMatchesInString:options:range:usingBlock:
-(void)method001
{
    NSError *aError = nil;
	NSString *str = @"http://www.oomori.com?name=oomori&age=44";
    NSRegularExpression *regExp = [NSRegularExpression regularExpressionWithPattern:@"([\\w]+)=([\\w]+)" 
                                                                            options:NSRegularExpressionCaseInsensitive
                                                                              error:&aError];
     __block NSMutableDictionary *muDic =  [NSMutableDictionary dictionaryWithCapacity:0];
    [regExp enumerateMatchesInString:str 
                             options:NSMatchingReportProgress 
                               range:NSMakeRange(0,[str length]) 
                          usingBlock:
     ^(NSTextCheckingResult *result ,NSMatchingFlags flags,BOOL *stop )
     {
         if (!(flags & NSMatchingProgress)) {
             NSString *aKey = [str substringWithRange:[result rangeAtIndex:1]];
             NSString *aValue = [str substringWithRange:[result rangeAtIndex:2]];
             [muDic setObject:aValue forKey:aKey];
         }
     }
     
     ];
    NSLog(@"%s%@",__FUNCTION__,[muDic description]);
    //=>-[OOOAppDelegate method001]{age = 44;name = oomori;}
}

正規表現とオプションの取得

正規表現パターンを取得するには(pattern)プロパティを参照します。(読み取り専用)大文字小文字を無視するなどオプションを取得するには(options)プロパティを参照します。(読み取り専用)キャプチャグループ数を取得するには(numberOfCaptureGroups)プロパティを参照します。(読み取り専用)

正規表現を使った文字列の検索

マッチする項目がいくつあるかを取得するには(– numberOfMatchesInString:options:range)メソッドを使用します。

マッチする項目を順に処理するためには(– enumerateMatchesInString:options:range:usingBlock)メソッドを使用します。

マッチする項目の情報を配列で取得するには(– matchesInString:options:range)メソッドを使います。
NSTextCheckingResultの配列で返されます。

#pragma mark NSRegularExpression  regularExpressionWithPattern:
-(void)method003
{
    
	NSString *str = @"abcdefg555hijklmn8972opqrstu";
    NSRegularExpression *regExp = [NSRegularExpression regularExpressionWithPattern:@"\\d+" options:NSRegularExpressionCaseInsensitive error:nil];
    NSArray *resultArray = [regExp matchesInString:str
                                                options:0
                                                  range:NSMakeRange(0, [str length])];
    
    [resultArray enumerateObjectsWithOptions:NSEnumerationConcurrent //並列
                              usingBlock:^(id obj,NSUInteger idx,BOOL *stop){
                                  NSTextCheckingResult *tcResult = (NSTextCheckingResult *)obj;
                                  NSLog(@"%s %@ %u-%u",__FUNCTION__,tcResult.regularExpression,tcResult.range.location,tcResult.range.length );
                                  return;
                                  
                              }];
    //=><NSRegularExpression: 0x6d4e7c0> \d+ 0x1 7-3
    //=><NSRegularExpression: 0x6d4e7c0> \d+ 0x1 17-4
    
}

最初にマッチする項目の情報を取得するには(– firstMatchInString:options:range)メソッドを使用します。最初にマッチする項目の範囲を取得するには(– rangeOfFirstMatchInString:options:range)メソッドを使用します。

正規表現を使っての置換

変更可能な文字列を、正規表現を使ってマッチした文字列を別の文字列に置換するには(– replaceMatchesInString:options:range:withTemplate)メソッドを使用します。
置換した数が返されます。
変更不可な文字列を、正規表現を使ってマッチした文字列を別の文字列に置換した新しい文字列として返すには(– stringByReplacingMatchesInString:options:range:withTemplate)メソッドを使います。

文字列のエスケープ

テンプレート内では$などの文字は置換用の$0、$1などに使われるためそのままでは使用できません。例えば$を\$に変えるように文字をエスケープするときに使うメソッドが(+ escapedTemplateForString)です。同様にパターン用にも(+ escapedPatternForString)というメソッドが用意されています。

カスタムの置換

カスタマイズした方法で置換するには(– replacementStringForResult:inString:offset:template)メソッドを使用します。

#pragma mark NSRegularExpression  stringByReplacingMatchesInString:
-(void)method009
{
    
	NSError* error = nil;
    NSRegularExpression* regularExpression = [NSRegularExpression
                                  regularExpressionWithPattern:@"\\b[1-3]\\b"
                                  options:NSRegularExpressionCaseInsensitive
                                  error:&error];

    NSString* aString = @"1  2  3";
    
    NSMutableString* mutableString = [aString mutableCopy];
    NSInteger offset = 0;
    
    for (NSTextCheckingResult* result in [regularExpression matchesInString:aString
                                                        options:0
                                                          range:NSMakeRange(0, [aString length])]) {
        
        NSRange resultRange = [result range];
        resultRange.location += offset; 
        NSString* match = [regularExpression replacementStringForResult:result
                                                   inString:mutableString
                                                     offset:offset
                                                   template:@"$0"];
        NSString* replacement;
        if ([match isEqualToString:@"1"]) {
            replacement = @"Jan";
        } else if ([match isEqualToString:@"2"]) {
            replacement = @"Feb";
        } else if ([match isEqualToString:@"3"]) {
            replacement = @"Mar";
        }
        
        [mutableString replaceCharactersInRange:resultRange withString:replacement];
        
        offset += ([replacement length] - resultRange.length);
    }
    
    NSLog(@"%s %@",__FUNCTION__,mutableString  );
    //=>
    
}

NSArrayクラス

変更しない配列クラス

INDEX>Foundation>NSArray

apple(mac)

apple(iOS)

更新時OS Ver.:OS X 10.8,iOS 7.0

解説

「配列」と呼ばれるコレクションクラスの一つです。
NSArrayは変更しない配列クラスで、NSMutableArrayが変更可能な配列クラスです。

NSSetとの違いは、NSArrayは順序が付いていること、重複が許されるということです。

NSArrayとNSMutableArrayはNSCopyingとNSMutableCopyingプロトコルに準拠します。

NSArrayとNSMutableArrayはクラスクラスタの一部です。
インスタンスはNSArrayやNSMutableArrayであるとは限りません。
しかしNSArrayやNSMutableArrayのプライベートなサブクラスではあります。

CFArrayとToll-free-bridgedです。

配列オブジェクトは破棄される時にreleaseメッセージを送信します。
配列に入れる際にautoreleaseしておきます。



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

概要

本クラスについて

配列と呼ばれる順序付きのコレクションクラスです。一旦作成した後、変更することはできません。変更可能な配列はNSMutableArrayを使います。
配列に含まれる各要素は、配列に含まれる際にコピーされません。(一部を除く、下記参照)NSArray自体は変更不可ですが、含まれる各要素が例えばNSMutableStringなど変更可能なオブジェクトである場合、その要素の内容は変更することができます。
なお、配列に各要素をコピーして含ませるメソッド– initWithArray:copyItemsでcopyItemsにYESを与えた場合)もあります。

各要素は配列に含まれる際にretainメッセージが送信されます。取り除かれる際にはreleaseメッセージが送信されます。

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

*

作成

複数のオブジェクトから配列を作成するメソッド+ arrayWithObjects: )、ファイルの内容から作成するメソッド+ arrayWithContentsOfFile: )、配列から配列を作成するメソッド+ arrayWithArray: )などがあります。
NSMutableArrayのために空の配列を作るメソッド+ array)もあります。

初期化

複数のオブジェクトから配列を初期化するメソッド– initWithObjects)、ファイルの内容から初期化するメソッド– initWithContentsOfURL)、配列から配列を初期化するメソッド– initWithArray)などがあります。
配列に要素を入れる場合には、通常要素のコピーは行いませんが、(– initWithArray:copyItemsメソッドのcopyItemsにYESを渡すと、各要素がコピーされ、その参照が配列に含まれます。

クエリ

配列に要素がいくつあるかを調べるメソッド– count)、指定したインデックスの要素を取り出すメソッド– objectAtIndex)指定したインデックスセットの要素を配列で取り出すメソッド(– objectsAtIndexes:)、最後の要素を取り出すメソッド– lastObject)などがあります。
配列の要素に指定のオブジェクトが含まれているかを調べるメソッド– containsObject)があり、各要素に対してisEqual:メッセージを送信して同じかどうかを判断します。

各要素を順番に調べるためにNSEnumeratorオブジェクトを返すメソッド– objectEnumerator)、逆順のNSEnumeratorオブジェクトを返すメソッド– reverseObjectEnumerator)がありますが、NSFastEnumeratorプロトコルやNSArrayの(- enumerateObjectsUsingBlockメソッドを使って処理できるため、NSEnumeratorを使う機会は減っています。

配列でオブジェクトを見つける

指定したオブジェクト(– indexOfObject)・範囲(– indexOfObject:inRange)・条件(– indexOfObjectPassingTest)などに合うインデックスを返すメソッドがあります。
先頭がindexOf…となっているメソッドは最初に見つけた要素のインデックス一つを返しますが、先頭がindexesOf…となっているメソッドはNSIndexSetで複数のインデックスを返すことができます。

要素にメッセージを送信

各要素すべてにメッセージを送信することができます。セレクタを使う方法(– makeObjectsPerformSelector)や、ブロックオブジェクトを使って(– enumerateObjectsUsingBlock:)送信することができます。ブロックオブジェクトを使う方法(– enumerateObjectsWithOptions:usingBlock)でオプション(NSEnumerationConcurrent)を指定すると並列処理を行うことができます。

ブロックオブジェクトを使って各要素を調べる方法

    NSArray *anArray = [NSArray arrayWithObjects:@"aaa",@"bbb",@"ccc",nil];
    NSString *itemToFind = @"ccc";
    __block BOOL foundIt = NO;//ブロック内で変更できるように__blockを付ける
    //配列anArrayにcccが含まれるかどうかを探す。
    [anArray enumerateObjectsWithOptions:NSEnumerationConcurrent //並列 
                                         //NSEnumerationReverse  //逆向き
                                 usingBlock:^(id s,NSUInteger idx,BOOL *stop){
                                     
                                     if ([(NSString*)s isEqual:itemToFind]) {
                                         foundIt=YES; //見つけたらfoundItをYESに
                                         *stop=YES;     //見つけたら検索をストップ
                                     }
                                     return;
                                     
                                 }]; 
    
    NSLog(@"%s : %@", __FUNCTION__,foundIt?@"YES":@"NO");
    //=>[OOOAppDelegate method024] : YES

配列の比較

配列が別の配列と同じかどうかを比較するメソッド– isEqualToArray)があります。

新しい配列の作成

指定した範囲の要素を別の配列にして返すメソッド– subarrayWithRange)やNSPredicateクラスを使って条件に合う要素のみを別の配列にするメソッド– filteredArrayUsingPredicate: )があります。

ソート

配列の要素を並べ替える方法は大きく分けて4つあり、比較関数を使うメソッド– sortedArrayUsingFunction:context)、デスクリプタを使うメソッド– sortedArrayUsingDescriptors)、セレクタを使うメソッド– sortedArrayUsingSelector)、コンペレータを使うメソッド– sortedArrayUsingComparator: )となっています。
コンペレータを使い、オプションを指定(NSSortConcurrent)することで並列処理ができるメソッド– sortedArrayWithOptions:usingComparator: )もあります。

保存

配列を保存するにはファイルパスで指定するメソッド– writeToFile:atomically)、URLで指定するメソッド(– writeToURL:atomically:)があります。URL形式を使う事が推奨されていますのでURLで指定するほうがいいでしょう。atomically:でYESを指定すると一旦別のファイルに書きだした後、元のファイルを移動して、新しく作ったファイルを移動してリネームします。
このメソッドを使うことで、plist形式のファイルで保存されます。

キーバリュー監視

配列に含まれる辞書や、配列に含まれる要素のプロパティがキーで特定できる場合、監視対象として登録(– addObserver:toObjectsAtIndexes:forKeyPath:options:context: )することができます。登録したキーやプロパティの値が変更された場合には通知されます。

キーバリューコーディング

配列に含まれる辞書や、配列に含まれる要素のプロパティがキーで特定できる場合、キーで指定した値の取得(– valueForKey)、変更(– setValue:forKey)ができます。


適合するプロトコル

NSCoding

encodeWithCoder:
initWithCoder:

NSCopying

copyWithZone:

NSMutableCopying

mutableCopyWithZone:

NSFastEnumeration

countByEnumeratingWithState:objects:count:

メソッド

配列の作成
メソッド OS X iOS 説明
+ array 10.0 2.0 配列を作成します。NSMutableArrayで使用します。
+ arrayWithArray: 10.0 2.0 別の配列で配列を作って返します。
+ arrayWithContentsOfFile: 10.0 2.0 指定したパスのファイルの中身からNSArrayを作って返します。
+ arrayWithContentsOfURL: 10.0 2.0 指定したURLの中身からNSArrayを作って返します。
+ arrayWithObject: 10.0 2.0 指定したオブジェクトからNSArrayを作って返します。
+ arrayWithObjects: 10.0 2.0 複数のオブジェクトからNSArrayを作って返します。
+ arrayWithObjects:count: 10.0 2.0 複数のオブジェクトから指定した分だけを含むNSArrayを返します。
配列の初期化
メソッド OS X iOS 説明
– initWithArray 10.0 2.0 他の配列で初期化して返します。
– initWithArray:copyItems 10.0 2.0 他の配列で初期化して返します。要素をコピーして初期化するかを指定できます。
– initWithContentsOfFile 10.0 2.0 ファイルの内容からNSArrayを初期化して返します。
– initWithContentsOfURL 10.0 2.0 ファイルの内容からNSArrayを初期化して返します。
– initWithObjects 10.0 2.0 与えたオブジェクトで配列を作って返します。
– initWithObjects:count 2.0〜
配列でのクエリ
– containsObject 2.0 配列の要素に指定のオブジェクトが含まれているかを返します。
– count 2.0 配列の要素数を返します。
– getObjects:range
– lastObject 2.0〜
– objectAtIndex 2.0〜
– objectAtIndexedSubscript:
– objectsAtIndexes 2.0〜
– objectEnumerator 2.0〜
– reverseObjectEnumerator 2.0〜
配列でオブジェクトを検索
– indexOfObject 2.0〜
– indexOfObject:inRange 2.0〜
– indexOfObjectIdenticalTo 2.0〜
– indexOfObjectIdenticalTo:inRange 2.0〜
– indexOfObjectPassingTest 4.0〜
– indexOfObjectWithOptions:passingTest 4.0〜
– indexOfObjectAtIndexes:options:passingTest 4.0〜
– indexesOfObjectsPassingTest 4.0〜
– indexesOfObjectsWithOptions:passingTest 4.0〜
– indexesOfObjectsAtIndexes:options: passingTest 4.0〜
– indexOfObject:inSortedRange: options:usingComparator 10.6 4.0〜 指定の範囲、オプションでNSComparatorブロックを使って、 探したい要素の番号を返します。
要素にメッセージを送信
– makeObjectsPerformSelector 2.0〜
– makeObjectsPerformSelector:withObject 2.0〜
– enumerateObjectsUsingBlock 10.6 iOS4.0 配列のそれぞれのオブジェクトにブロックを実行します。
– enumerateObjectsWithOptions:usingBlock 10.6 iOS4.0 配列のそれぞれのオブジェクトにブロックを実行します。
– enumerateObjectsAtIndexes: options: usingBlock 4.0〜
配列の比較
– firstObjectCommonWithArray
– isEqualToArray 2.0〜
新しい配列の配送
– arrayByAddingObject iOS2.0 レシーバにオブジェクトを追加した新しい配列を返します。
– arrayByAddingObjectsFromArray iOS2.0
– filteredArrayUsingPredicate 10.4 iOS3.0 predicateをレシーバーの内容に対して評価し、一致するオブジェクトを含む新しい配列を返します
– subarrayWithRange 2.0〜
ソート
– sortedArrayHint 2.0〜
– sortedArrayUsingFunction:context 2.0〜 関数で比較して並び替えた配列を返します。
– sortedArrayUsingFunction:context:hint 2.0〜
– sortedArrayUsingDescriptors 10.3 2.0〜
– sortedArrayUsingSelector 2.0〜 配列内の要素を比較して、昇順にソートされた配列を返します。
– sortedArrayUsingComparator 10.6 4.0 NSComparatorブロックでソートした配列を返します。 
– sortedArrayWithOptions:usingComparator 10.6 4.0 NSComparatorブロックでソートした配列を返します。 
文字列エレメントと動作する
メソッド OS X iOS 説明
– componentsJoinedByString iOS2.0 配列の要素が全て文字列の場合、配列の全ての要素をセパレータをいれてつなげます
詳細の作成
メソッド OS X iOS 説明
– description 10.0 iOS2.0 配列を文字列で返します。
– descriptionWithLocale 2.0〜
– descriptionWithLocale:indent 2.0〜
– writeToFile:atomically 10.0 2.0 指定したパスのファイルに書き込みます。
– writeToURL:atomically 10.0 2.0 指定したURLに書き込みます。
パスの適正化
– pathsMatchingExtensions 2.0〜
キーバリューオブザービングビング
– addObserver:forKeyPath:options:context 10.4 2.0
– removeObserver:forKeyPath 10.4 2.0〜
– addObserver:toObjectsAtIndexes: forKeyPath:options:context 10.4 2.0
– removeObserver:fromObjectsAtIndexes: forKeyPath 2.0〜
– removeObserver:forKeyPath:context 5.0〜
– removeObserver:fromObjectsAtIndexes:forKeyPath:context 5.0〜
キーバリューコーディング
– setValue:forKey 2.0〜
– valueForKey 2.0〜
廃止されたメソッド 2.0〜4.0

– getObjects OS X 10.6,iOS4.0で使用中止

定数

NSBinarySearchingOptions

iOS7.0で追加

-[NSArray firstObject]
-[NSArray init]
-[NSMutableArray init]

NSXMLNodeクラス

Index>Foundation>

apple(mac)

解説

継承 NSObject
準拠 NSObject (NSObject)
フレームワーク /System/Library/Frameworks/Foundation.framework
使用可能 Mac OS X v10.4以降
定義

概要

適合するプロトコル

サブクラス化の注意

NSMutableData

INDEX>Foundation>

変更可能な生データクラス

解説

変更可能な生データです

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

概要

変更可能なバイナリデータのクラスです。

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

ARC環境では、管理対象のオブジェクトキャストに__bridge、__bridge_retained、__bridge_transferが必要になります。

変更可能なデータオブジェクトの作成

仮の容量を指定して変更可能なデータオブジェクトを作成するには(+ dataWithCapacity: メソッドを使用します。仮の容量は作成時の効率化のために使用されるだけで必要になれば自動的にメモリを確保します。

長さを指定して変更可能なデータオブジェクトを作成するには(+ dataWithLength: メソッドを使用します。内容は0に書き換えられます。

それぞれallocで作成した後初期化するメソッドがあります。(– initWithCapacity: )(– initWithLength:)

長さを指定して変更可能なデータオブジェクトを作成

#pragma mark NSData dataWithCapacity:
-(void)method002
{
    NSMutableData *aData = [NSMutableData dataWithCapacity:100];
    NSLog(@"%s %@",__FUNCTION__,[aData description]);
}

長さを調整

レシーバの末尾に0で埋めたデータを付加するには(– increaseLengthBy: メソッドを使用します。

レシーバの先頭からの長さをセットするには(– setLength: メソッドを使用します。現在のレシーバの長さよりも短い場合はセットする長さより後の部分は切り捨てられます。現在のレシーバの長さよりも長い場合は末尾に0で埋められたデータが追加されます。

末尾に0で埋められたデータを追加

#pragma mark NSData increaseLengthBy:
-(void)method004
{
    NSMutableData *aData = [NSMutableData dataWithLength:20];
    NSLog(@"%s %@",__FUNCTION__,[aData description]);
    //=><00000000 00000000 00000000 00000000 00000000>
    [aData increaseLengthBy:10];
    NSLog(@"%s %@",__FUNCTION__,[aData description]);
    //=><00000000 00000000 00000000 00000000 00000000 00000000 00000000 0000>

}

データへのアクセス

レシーバのポインタを取得するには(– mutableBytesメソッドを使用します。

データの追加

レシーバの末尾にデータオブジェクトを追加するには(– appendData: メソッドを使用します。レシーバの末尾にバイト列を追加するには(– appendBytes:length: メソッドを使用します。

レシーバに別のデータを追加

#pragma mark NSData appendData
-(void)method007
{
    unsigned char *pngBytes = malloc(sizeof(unsigned char)*5);
    pngBytes[0] = 0x01;
    pngBytes[1] = 0x02;
    pngBytes[2] = 0x03;
    pngBytes[3] = 0x04;
    pngBytes[4] = 0x05;
        
    NSMutableData *aData = [NSMutableData dataWithLength:20];
    NSLog(@"%s %@",__FUNCTION__,[aData description]);
    //=><00000000 00000000 00000000 00000000 00000000>
    [aData appendBytes:pngBytes length:5];
    NSLog(@"%s %@",__FUNCTION__,[aData description]);
    //=><00000000 00000000 00000000 00000000 00000000 01020304 05>
}

データの修正

指定した範囲をバイト列で置換するには(– replaceBytesInRange:withBytesメソッドを使います。
指定した範囲を指定した長さのバイト列で置換するには(– replaceBytesInRange:withBytes:lengthメソッドを使います。置き換えるバイト列がそれまでものより短ければ、レシーバ全体が短くなります。
指定した範囲を0で埋めるには(– resetBytesInRangeメソッドを使用します。

レシーバすべてを別のデータオブジェクトの内容で置き換えるには(– setData: メソッドを使用します。

指定の範囲を0で埋めたデータに置き換え

#pragma mark NSData resetBytesInRange
-(void)method011
{
    int elementCount = 20;
    unsigned char *pngBytes = malloc(sizeof(unsigned char)*elementCount);
    for (int i = 0; i < elementCount; i++) {
        pngBytes[i] = 0xFF;
    }
    NSData *data1 = [NSData dataWithBytesNoCopy:pngBytes length:5 freeWhenDone:YES];
  
    
    NSMutableData *aData = [NSMutableData data];
    NSLog(@"%s %@",__FUNCTION__,[aData description]);
    //=><>
    [aData setData:data1];
    NSLog(@"%s %@",__FUNCTION__,[aData description]);
    //=><ffffffff ffffffff ffffffff ffffffff ffffffff>
    
    [aData resetBytesInRange:NSMakeRange(5, 8)];
    NSLog(@"%s %@",__FUNCTION__,[aData description]);
    //=><ffffffff ff000000 00000000 00ffffff ffffffff>
    
    void *dataPointer = [aData mutableBytes];
    NSLog(@"%s %p",__FUNCTION__,dataPointer);
}
データへアクセスする

– mutableBytes

クラスメソッド

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クラスをサブクラス化する必要はありません。

クラスメソッド