質問

私は object-c を学んでいますが、@ 記号に何度も遭遇します。これは、文字列の先頭やアクセサー メソッドの合成など、さまざまなシナリオで使用されます。

object-c の @ 記号は何を意味しますか?

役に立ちましたか?

解決

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

したがって、ごく一部の例外を除いて、いつでも @ 一部の Objective-C コードでは、C または C++ の構造ではなく、Objective-C の構造を参照しています。

主な例外は次のとおりです id, Class, nil, 、 そして Nil, 、通常、言語キーワードとして扱われますが、 typedef または #define 彼らの後ろにいます。たとえば、コンパイラは実際に次のことを処理します。 id 特に、宣言に適用されるポインター型変換規則と、GC 書き込みバリアを生成するかどうかの決定に関してです。

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

他のヒント

から Objective-C チュートリアル:象徴, 、さまざまなキーワードの先頭に表示される理由:

@ を使用すると、Objective-C コンパイラを既存の C コンパイラにボルトオンすることが簡単になります。@ は文字列リテラルを除く C のどのコンテキストでも有効ではないため、トークナイザー (コンパイラーの初期の簡単なステップ) を変更して、単に文字列定数の外側の @ 文字を検索することができます (トークナイザーは文字列リテラルを理解します) 、したがって、これを区別する立場にあります)。@が遭遇すると、トークンザーはコンパイラの残りの部分を「Objective-Cモード」に配置します。 (Objective-Cパーサーは、Objective-Cコードの終了を検出すると、コンパイラを通常のCモードに戻す責任があります)。

また、文字列リテラルの前にある場合、C の 'char *' ではなく NSString が作成されます。

から マクラマーズ:Objective-C チュートリアル, 、文字列リテラルの前にある場合:

@"" NSString リテラルもあります。これは本質的に NSString の +stringWithUTF8String メソッドの短縮形です。

また、@ は C 文字列に Unicode サポートを追加します。

から マニュアル:

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

NSStringクラスは、任意の長さの文字列を保存するための組み込みメモリ管理、Unicodeのサポート、PrintFスタイルのフォーマットユーティリティなど、予想されるすべての利点を持つ文字列のオブジェクトラッパーを提供します。ただし、そのような文字列は一般的に使用されるため、Objective-Cは、一定の値からnsStringオブジェクトを作成するための速記表記を提供します。この速記を使用するには、次の例に示すように、 @シンボルを使用した通常の二重引用文字列の前にしなければなりません。

NSString *myString = @"My String\n";
NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top