※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。


トップ > リファレンス > Data Management: Strings, Text, & Fonts > NSString クラスリファレンス

NSString クラスリファレンス 翻訳元


このページの最終更新: 2010-02-04
ADCの最終更新:2009-08-28


継承するクラス NSObject
準拠しているプロトコル NSCoding
NSCopying
NSMutableCopying
NSObject (NSObject)
フレームワーク /System/Library/Frameworks/Foundation.framework
使用可能な環境 Mac OS X v10.0 以降
宣言ファイル NSPathUtilities.h
NSString.h
NSURL.h
コンパニオンガイド String Programming Guide for Cocoa
Property List Programming Guide
サンプルコード CoreRecipes
From A View to A Movie
FunHouse
GLSLShowpiece
Quartz Composer WWDC 2005 TextEdit


概観(Overview)


 NSSringクラスは変更不能文字列を管理するオブジェクトのプログラマチックなインターフェースを宣言しています。(変更不能文字列とは生成時に定義され、その後変更できない文字列のことです。NSStringクラスはUnicode文字の配列(つまりUnicode文字列)を使って実装されています。)
 NSStringのサブクラスで変更可能なものがNSMutableStringクラスです。
 NSStringクラスには二つのプリミティブメソッドがあります。lengthメソッドとcharacterAtIndex:メソッドです。これらのメソッドのインターフェースは他の全てのメソッドの基になっています。lengthメソッドはUnicode文字列の文字数を返します。characterAtIndex:メソッドは最初の文字を0とするインデックスで各文字にアクセスします。
 NSStringクラスでは文字列の検索と比較の為のメソッドを宣言しています。また、文字列から数値を読み出すメソッドや、様々な方法で文字列を組み合わせるメソッド、文字列を様々な型(エンコーディング等)に変換するメソッド等も宣言しています。
 Application KitではNSPragraphStyleクラスやそのサブクラスであるNSMutablePragraphクラスを使ってNSAttributedStringクラスで使われる段落やルーラーをカプセル化しています。さらに、文字列の描画に関するメソッドはNSString Application Kit Additions Referenceに詳細があるので、そちらを参照してください。
 NSStringクラスはCore FoundationのCFString(CFStringRefを参照)と"toll-free bridged"です。これはつまり、関数やメソッド内のCore Foundationの型はブリッジされたFoundationの型と相互に交換可能だということを意味しています。したがって、メソッド中のNSString *パラメータはCFStringRefに、関数内のCFStringRefパラメータはNSStringインスタンスに書き換えることができる(コンパイラの警告を回避する為にはキャストが必要)、ということになります。これはNSStringのコンクリートクラスにも適用可能です。toll-free bridgingの詳細については、Interchangeable Data Typesを参照してください。

文字列オブジェクト(String Objects)

 NSStringは、フレームワーク内の文字列を表すオブジェクトです。文字列をオブジェクトとして表現することで、他のどのオブジェクトでも文字列を扱うことができるようになります。こうした表現により、カプセル化の利点も得ることができます。その結果、文字列オブジェクトはどんなストレージやエンコーディングでも、単なる文字の配列である限りは効率よく扱うことができます。NSStringとNSMutableStringの二つのパブリッククラスのクラスタは、各々変更可能、不能な文字列のインターフェースを宣言しています。
注: 変更不能文字列とは生成時に定義され、その後変更できない文字列のことです。NSStringクラスはUnicode文字の配列(つまりUnicode文字列)を使って実装されています。変更不能文字列を生成、管理したいときはNSStringを使い、生成後に文字列を構成して管理したいときはNSMutableStringクラスを使用してください。
 NSStringクラスやNSMutableStringクラスを使って生成されたオブジェクトは文字列オブジェクトとして(結果的に同じであれば単なる文字列として)参照されます。C文字列型は標準のchar *型として参照されます。クラスクラスタでは当たり前のことですが、文字列オブジェクトのインスタンスは正確にはNSStringクラスやNSMutableStringクラスのインスタンスではなく、非公開なサブクラスのインスタンスです。ただしクラスが非公開でも、そのインターフェースはスーパークラスであるNSStringクラスとNSMutableStringクラスで宣言され、公開されています。これらの文字列のクラスはクラス同士の変換を容易にする為にNSCopyingプロトコルとNSMutableCopyingプロトコルに準拠しています。

文字への理解(Understanding characters)

 文字列オブジェクトはユニコード文字(ユニコードはユニコードの登録商標です)の配列を表します。文字列の長さを知るのにlengthメソッドを使えますし、特定の文字を得るのにcharacterAtIndex:メソッドが使えます。これらの「プリミティブ」メソッドは文字列オブジェクトの基本的なアクセス手段を提供します。
 しかしほとんどの場合、文字列の使われ方はそれ自体を一つの実体として扱う高レベルなものです。具体的には、文字列同士の比較、検索、統合等です。一つずつ文字にアクセスしたい場合、ユニコード文字エンコーディングについて、特に文字の並び順に起因する問題について理解する必要があります。詳細はThe Unicode Standard(ユニコード協会:ボストン 著:アディソン,ウェスレー)か、ユニコード協会のウェブサイトを参照してください。また、String Programming Guide for CocoaのCharacters and Grapheme Clustersも参考にしてください。

UTF-16エンコーディングの解析(Interpreting UTF-16-encoded data)

 UTF-16でエンコードされた文字列(またはUTF-16として扱うバイトストリーム)から文字列オブジェクトを生成するときにバイトオーダーが明らかでなく、バイトオーダーを指定するBOM(バイトオーダーマーク)もない場合は、NSSringオブジェクトはUTF-16文字列をビッグエンディアンであると仮定します。ユニコード文字の配列からNSStringオブジェクトを生成するときに返される文字列は常にネイティブエンディアンなので、そのユニコード文字列は必ずネイティブエンディアンのユニコード文字で構成されます。

オブジェクトの割当(Distributed objects)

 オブジェクトの割当の関係上、変更可能文字列は参照渡しで、変更不能文字列は値渡しで渡されます。

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

 NSString(NSMutableString)クラスのサブクラスを作ることはできますが、その場合文字列を保存しておく領域(サブクラスには継承されません)と、二つのプリミティブメソッドが必要になります。抽象クラスであるNSStringクラスとNSMutableStringクラスは、ほとんどが非公開のクラスクラスタの公開されたインターフェースです。そして、その具体クラスはその状況に適した文字列オブジェクトを生成して返します。独自の具体クラスを作るときは、そのクラスクラスタの要求を満たしていることを確認してください(「オーバーライドするメソッド(Methods to Override)」で解説します)。
 NSStringクラスのサブクラスが本当に必要か確認してください。そのサブクラスは文字列を表し、それ以外は表すべきではありません。既に述べたように、サブクラスが持つべき唯一の属性は、文字領域の長さとその管理、そして個々の文字にアクセスする手段です。NSStringクラスのサブクラスを作る正当な理由としては、異なるバッキングストアを(おそらくはパフォーマンス工場の為に)提供したい場合や、メモリ管理等のオブジェクトの機能に違った実装をしたい場合等があります。もしNSStringクラスのサブクラスに重要でない属性やメタデータを加えたいときには、代わりにオブジェクトコンポジションを使用する方が良いでしょう(「サブクラス作成の代わりに(Alternatives to Subclassing)」を参照)。Cocoaでは既にこの例として、NSAttributedStringクラスが提供されています。

オーバーライドするメソッド(Methods to Override)

 NSStringクラスのサブクラスはすべてプリミティブメソッドであるlengthメソッドとcharacterAtIndex:メソッドをオーバーライドする必要があります。これらのメソッドはバッキングストアの文字列を処理しなければなりません。このバッキングストアには、静的配列、動的に確保された領域、標準のNSStringオブジェクト、その他のデータ型やデータ構造が使えます。代わりの実装を提供したい他のメソッドを一部でも全てでもオーバーライドすることもできます。例えば、パフォーマンス向上の為にgetCharacters:range:メソッドをオーバーライドしてより速い実装に変えることが推奨されます。
 サブクラスが管理しているバッキングストアに対応したいイニシャライザをサブクラスに実装したくなることがあるかもしれません。NSStringクラスには指定イニシャライザが無いので、サブクラスのイニシャライザではsuperクラスのinit?メソッドを呼び出すだけで構いません。NSStringクラスはNSCopyingプロトコル、NSMutableCopyingプロトコル、NSCodingプロトコルに準拠しています。サブクラスのインスタンスを複製、エンコードしたい場合は、これらのプロトコルのメソッドをオーバーライドしてください。
 hash?メソッドをオーバーライドするべきではないということに気をつけてください。

サブクラス作成の代わりに(Alternatives to Subclassing)

 たいていの場合、NSStringクラス(ついでに言うなら抽象クラスや、クラスクラスタの公開クラスなども)のサブクラスを作成する代わりにオブジェクトコンポジションを使用する方がより簡単で良い結果が得られます。サブクラスを作成するのは、文字列オブジェクトに必ずしも必要でない属性やメタデータを追加するような特別な場合のみです。オブジェクトコンポジションでは、カスタムクラス(通常NSObjectのサブクラス)はNSStringオブジェクトと一つかそれ以上のカスタムオブジェクトに要求されるメタデータを保持するインスタンス変数を持ちます。したがって、サブクラスのインターフェースは埋め込まれた文字列オブジェクトをメタデータにアクセスするメソッドを含むように設計してください。
 既存のクラスに動作を追加したい場合は、NSStringクラスのカテゴリを書くことができます。しかし、このカテゴリは使用する全てのNSStringオブジェクトに作用するので、予期しない結果を引き起こすこともあることを覚えておいてください。

採用しているプロトコル(Adopted Protocols)


   encodeWithCoder:
   initWithCoder:
   copyWithZone:
   mutableCopyWithZone:

このクラスでできること(Tasks)



クラスメソッド



インスタンスメソッド



定数(Constants)





|新しいページ|検索|ページ一覧|RSS|@ウィキご利用ガイド | 管理者にお問合せ
|ログイン|