私はobjective-cを学んでいて、@記号にぶつかります。これは、さまざまなシナリオで使用されます。たとえば、文字列の先頭や、アクセサメソッドの合成などです。
Objective-cで@記号は何を意味していますか?
私はobjective-cを学んでいて、@記号にぶつかります。これは、さまざまなシナリオで使用されます。たとえば、文字列の先頭や、アクセサメソッドの合成などです。
Objective-cで@記号は何を意味していますか?
回答:
@
他の言語のキーワードと競合しない方法で、Objective-C言語のキーワードを導入するために使用されますので、文字は、Cまたは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
宣言の属性セクション内でのみ有効です。
@
です。
@
文字はCで使用されていなかったため、既存のCコードとの100%の互換性を維持する代替解析の便利な「エスケープハッチ」でした。
@記号:Objective-Cのチュートリアル、それはさまざまなキーワードの前にある理由:
@を使用すると、Objective-Cコンパイラを既存のCコンパイラに簡単にボルトで固定できるはずです。@は文字列リテラルを除くCのどのコンテキストでも有効ではないため、トークナイザー(コンパイラーの初期の簡単なステップ)を変更して、文字列定数の外で@文字を単純に探すことができます(トークナイザーは文字列リテラルを理解しますなので、これを区別する立場にあります)。@が検出されると、トークナイザは残りのコンパイラを「Objective-Cモード」にします。(Objective-Cパーサーは、Objective-Cコードの終わりを検出したときに、コンパイラーを通常のCモードに戻す責任があります)。
また、文字列リテラルの前に表示すると、Cでは「char *」ではなくNSStringになります。
Macrumorsから: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"];
@
使用される場所の1つの例にすぎません。私はこのようなコードを見ています:mapperOptions = @{ kSTMapperVolumeResolutionKey: @(volumeResolution),
... NSStringとは何の関係もありません