2009-08-30 11 views
31

メソッド-characterAtIndex:があり、unicharを返します。unicharとNSString - これらはどのように互換性がありますか?

  • (のunichar)characterAtIndex:(NSUInteger)インデックス

明らかNSStringない本のunicharは、NSStringに変換又はためNSStringにfeededすることができるだろうか目的を比較する?

そして:NSStringは、内部的に単色の項目の配列で構成されていますか?

答えて

63

2つのオプションがあります。

NSString *otherString = @"TestString"; 

NSString *str = [NSString stringWithUnichar:[otherString characterAtIndex:1]]; 

でそれを呼び出すか、あなただけの直接のように行くことができます次に

@interface NSString (MNNSStringWithUnichar) 
+ (NSString *) stringWithUnichar: (unichar) value; 
@end 


@implementation NSString (MNNSStringWithUnichar) 

+ (NSString *) stringWithUnichar:(unichar) value { 
    NSString *str = [NSString stringWithFormat: @"%C", value]; 
    return str; 
} 

@end 

を最初はNSStringのにstringWithUnicharメソッドを追加するカテゴリです
NSString *str = [NSString stringWithFormat:@"%C",[otherString characterAtIndex:1]]; 

カテゴリを繰り返し使用する場合や、1度だけ行う必要がある場合はカテゴリを選択してください、stringWithFormatの例を使用してください!!

のNSStringの内部わからするが、私はそれはおそらく

unichar * 

または(Cチャー*のような)unicharsの配列をラップしていると思うだろない

のunicharは単純です文字を格納するために使用される16ビットの値。 8ビットのみのunsigned charとは異なり、0-255以上の値を保持できるため、16ビットのUnicode文字も保持できます。 NSStringのはunichars

EDITの配列が含まれています(クラスタ)クラス[ES]である。ここ

がある人はNSStringのがあると思うかについて、いくつかの記事:

http://cocoawithlove.com/2008/08/string-philosophies-char-arrays.html

http://www.reddit.com/r/programming/comments/6v1yw/string_philosophies_char_arrays_stdstring_and/

希望に役立ちます!だから使っ

+ (id)stringWithCharacters:(const unichar *)characters length:(NSUInteger)length; 

yourString = [NSString stringWithCharacters: &yourChar length: 1]; 

をyourCharパラメータはポインタでなければなりません

+0

あなたは "TestString"の前に@を忘れていますか? – newacct

+0

私は何かが右に見えなかったことを知っていた...ありがとう! – micmoo

4

別のオプションは、クラスのメソッドを使用することです。

2

NSStringは実際にクラスクラスタです。これは、コンテンツとサイズに基づいたパフォーマンスを含むさまざまな理由で、NSStringを作成するときにCFStringに対するフリーダイヤルをサポートすることを意味します。実際には、NSStringであるかどうかを尋ねるときにisKindOfにYESを返す多くのプライベートクラスNSStringクラスのすべてのメソッドに応答します。これはプロトコルのようなものですが、すべてのオブジェクトは公開APIでNSStringと言って実行します。

NSStringとCFStringのドキュメントでは概念的にはUTF16 unicharの配列 実装に利点がある場合は別の内部表現を使用することがあります。通常はパフォーマンスがメモリサイズになることがあります。しかし、あなたはそれに頼って、質問されたときにunicharのC配列を与えるか、APIが約束した何かを与えることができます。

成熟には長い時間がかかり、ほぼすべてのリリースで内部的に調整されています。

簡潔に言えば、それは、Unicode標準の論理文字列の記述にほぼ一致するUTF16 unicharの配列によってサポートされていると考えることができます。しかし、心に留めておくべきことは、あなたが実際にあなたが内部にあると言うことだけを内部にあることを心配する必要はないはずです。

これは、Unicodeの最適な実装の1つです。 どのように動作しているかを完全に把握したい場合は、opensource.apple.comでCFStringのソース(ほとんど)を見ることができます これはCとCore Foundation(オブジェクト指向のC)で、かなり定型化されています。すぐに理解してください。

NSStringとCFStringには、unicharから返って作成するメソッドがあります。ほとんどの人はほとんどの時間を必要とすべきではありません。 あなたがそうするならば、慎重に、多くを読んで素朴な間違いをするように準備してください。 Unicodeは大きな話題です。それを正しく扱うことは、そのレベルの科学と芸術です。これがNSStringの理由の1つです。それはあなたがしたい、または必要がない限り、あなたが頻繁にする必要はありませんので、ハードものの多くを処理します。

関連する問題