3

私は現在、本やオンラインチュートリアルを読んだり、Appleのドキュメントを参照したりして、Objective-Cを学ぼうとしていますが、クリックしないものもあります。クラスについて質問があります。NSStringの使用方法にあまり注意を払わずに、しばらくの間NSStringを使用しています。

誰かがObjective-Cの特定のクラスのメソッドを使用できるようにするには、最初にそれをインスタンス化する必要があるという印象を受けました…</ p>

ClasssName *varName = [[ClassName alloc]init];

次に、次のようなメソッドを呼び出します...

[varName someMethod];

しかし、NSStringがどのように使用されているかを見ると、私は少し混乱しています。たとえば、これが通常の使用方法です...

NSString *someString = @"some text here";
[someString stringByAppendingFormat:  @"some text = %d", 3];

私がクラスについて読んだことに続いて、代わりに次のようなことをする必要があります。

NSString *someString  =  [[NSString alloc]initWithString: @"some text here"];
[someString stringByAppendingFormat:  @"some text = %d", 3];

一部のクラスがそのメソッドを使用する前にインスタンス化を必要としない理由を誰かが説明できますか?

4

2 に答える 2

7

Objective-Cは、リテラルと呼ばれるいくつかの略語を知っています。コンパイラは特別な表記法を認識しています。文字列リテラルはバイナリにコンパイルされ、アプリの存続期間中終了します。

ほとんどの場合、実行時に作成されたオブジェクトのように動作します。

  • 2つのリテラルが同一である場合、1つのオブジェクトのみが作成され、永久に存続します
  • 以前にリテラルとして使用して作成NSString *string = [[NSString alloc] initWithString:@"My String"];した場合は、それを指すこともできます。@"My String"string

AppleLLVMコンパイラ4.0以降Objective-Cはさらにいくつかのリテラルを認識しています。ただし、文字列リテラルとは対照的に、これらのリテラルは実行時に便利な初期化子を介して作成されます。


ご了承ください

[someString stringByAppendingFormat:  @"some text = %d", 3];

someStringを変更しません。新しい文字列オブジェクトを返します。

NSString *newString = [someString stringByAppendingFormat:  @"some text = %d", 3];
于 2013-01-07T15:19:13.073 に答える
5
于 2013-01-07T15:23:31.523 に答える