152

私はobjective-cを学んでいて、@記号にぶつかり続けています。これは、さまざまなシナリオで使用されます。たとえば、文字列の先頭やアクセサメソッドの合成などです。

Objective-cで@記号はどういう意味ですか?

4

4 に答える 4

161

この@文字は C または C++ の識別子では使用されないため、他の言語のキーワードと競合しない方法で Objective-C 言語のキーワードを導入するために使用されます。これにより、言語の「目的」部分を C または C++ 部分と自由に混在させることができます。

したがって、ごくわずかな例外を除いて、Objective-C コードで目にするときはいつでも@、C または C++ の構成ではなく、Objective-C の構成を調べていることになります。

主な例外はidClassnil、およびです。これらは、後ろにまたはNilがある場合でも、一般に言語キーワードとして扱われます。たとえば、コンパイラは実際には、宣言に適用されるポインター型変換規則や、GC 書き込みバリアを生成するかどうかの決定に関して特別に扱います。typedef#defineid

inその他の例外outinout、、、、、およびonewayです。これらは、分散オブジェクトをより効率的にするために、メソッド パラメーターと戻り値の型のストレージ クラス アノテーションとして使用されます。(これらはランタイムから利用可能なメソッド シグネチャの一部になり、DO はトランザクションを最適にシリアル化する方法を決定するために参照できます。) 宣言内には、、、、、、、、および;属性もあります。これらは、宣言の属性セクション内でのみ有効です。byrefbycopy@propertycopyretainassignreadonlyreadwritenonatomicgettersetter@property

于 2008-08-25T08:36:29.887 に答える
68

Objective-Cチュートリアルから:@記号、さまざまなキーワードの前にある理由:

@を使用すると、Objective-Cコンパイラを既存のCコンパイラに簡単に追加できるようになります。@は文字列リテラル以外のCのコンテキストでは無効であるため、トークナイザー(コンパイラーの初期の単純なステップ)を変更して、文字列定数の外側の@文字を検索することができます(トークナイザーは文字列リテラルを理解します) 、したがって、これを区別する立場にあります)。@が検出されると、トークナイザーはコンパイラーの残りの部分を「Objective-Cモード」にします。(Objective-Cパーサーは、Objective-Cコードの終了を検出したときに、コンパイラーを通常のCモードに戻す役割を果たします)。

また、文字列リテラルの前に表示されると、Cの「char*」ではなくNSStringになります。

于 2008-08-25T08:04:44.843 に答える
27

Macrumors: Objective-C Tutorialから、文字列リテラルの前にある場合:

@"" NSString リテラルもあります。基本的には、NSString の +stringWithUTF8String メソッドの省略形です。

@ は、C 文字列への Unicode サポートも追加します。

于 2009-01-11T15:27:28.670 に答える
18

マニュアルから:

Objective-C フレームワークは通常、C スタイルの文字列を使用しません。代わりに、文字列を NSString オブジェクトとして渡します。

NSString クラスは、任意の長さの文字列を格納するための組み込みのメモリ管理、Unicode のサポート、printf スタイルの書式設定ユーティリティなど、期待されるすべての利点を持つ文字列用のオブジェクト ラッパーを提供します。ただし、このような文字列は一般的に使用されるため、Objective-C では、定数値から NSString オブジェクトを作成するための簡略表記を提供しています。この短縮形を使用するには、次の例に示すように、通常の二重引用符で囲まれた文字列の前に @ 記号を付けるだけです。

NSString *myString = @"My String\n";
NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];
于 2012-02-02T05:51:32.593 に答える