2

私を悩ませているのは、「リテラル」という用語がNSStringや などのクラスのインスタンスを指すために使用される理由NSArrayです。私NSStringは、引用符の間にある「文字通り」文字列であることと関係があると思っていました。可哀想に聞こえるかもしれませんが、それは私がそれについて考えていた方法です。

NSArrayそして今日、 の特定のインスタンスはリテラル インスタンス、つまり「リテラル構文」を使用して作成されたクラスのインスタンスとも呼ばれることがあることを知りました。

4

3 に答える 3

2

@Linuxios が指摘しているように、リテラル構文は言語に組み込まれています。しかし、それらはあなたが思っているよりも広いです。リテラルは、実際の値がソースでエンコードされていることを意味します。そのため、ObjC にはかなりの数のリテラル構文があります。例えば:

  • 1- 整数
  • 1.0- ダブル
  • 1.0f- 浮く
  • "a"- Cストリング
  • @"a"-NSString
  • @[]-NSアレイ
  • ^{}- 関数

ええ、ブロックは単なる関数リテラルです。これらは、シンボル名 (変数や定数など) に割り当て可能な匿名の値です。

一般に、リテラルはテキスト セグメントに格納でき、(実行時ではなく) コンパイル時に計算できます。私の記憶が正しければ、配列リテラルは現在、同等のコードに展開され、実行時に評価されますが、@"..."文字列リテラルは静的データとしてバイナリにエンコードされます (少なくとも現在はそうです。実際の関数呼び出しをエンコードするために使用される Apple 以外のバージョンの gcc私が覚えているように、静的文字列を作成します)。

于 2015-02-04T20:36:32.503 に答える
2

A literal syntax or a literal is just an object that was created using a dedicated syntax built into the language instead of using the normal syntax for object creation (whatever that is).

Here I create a literal array:

NSArray* a = @[@"Hello", @"World"];

Which is, for all intents and purposes equivalent to this:

NSArray* a = [NSArray arrayWithObjects:@"Hello", @"World", nil];

The first is called a literal because the @[] syntax is built into the language for creating arrays, in the same way that the @"..." syntax is built in for creating NSStrings.

于 2015-02-04T20:02:31.960 に答える