web-dev-qa-db-ja.com

NSStringオブジェクトの最大長は?

NSStringオブジェクトに保持できる最大サイズの文字列はいくつですか?

これは動的に変化しますか?

33
Christina

NSStringのインデックスとサイズ関連のメソッドはNSUIntegerを返すため、NSStringのハード制限はNSUIntegerMax文字であると想定します。現在iOSを実行できるすべてのデバイスは32ビットであるため、NSUIntegerMaxは2 ^ 32-1であり、NSStringは42億を少し超える文字を保持できます。

ただし、他の人が指摘したように、実際の制限ははるかに小さくなっています。特にiOSデバイスでは、NSStringのハード制限に達する前にメモリが不足します。

62
Spencer Uresk

NSStringは実際にはクラスクラスタであるため、異なる具象クラス(たとえば、NSStringNSMutableString)が異なる「バッキングストア」になる可能性が高いデータの保存。 NSStringをサブクラス化して、独自のバッキングストア実装を提供することもできます(特定のニーズがある場合は、 "NSString のサブクラス化に関する注意事項を参照してください)。

NSStringが実際に使用しているバッキングストアについては、これはAppleによって文書化されていない実装の詳細であり、いつでも変更される可能性があります。

私自身、NSStringの最大長は使用可能なメモリによってのみ制限されると思います。実際には、使用可能なメモリは非常に大きくなる可能性があるため、他の制限(おそらくパフォーマンスに関連する制限)がありますが、そのような制限は発生していません。

8
sergio

仮想メモリシステムで表現できるのとほぼ同じ量のメモリを保持できます。しかし、個人的には、最大長はその時点で使用可能なメモリにのみ制限されていると感じています。

3
Manoj