困扰我的是为什么术语“字面上的”字样。用于引用类NSString
和NSArray
等类的实例。我只看到了NSString
中使用的术语,并且天真地我认为它与它有关&字面上'是一个字符串,在引号之间。对不起,如果这听起来很可悲,但这就是我一直在想的。
然后今天我了解到NSArray
的某些实例也可以称为文字实例,即使用'文字语法创建的类的实例。
答案 0 :(得分:2)
文字语法或文字只是使用语言内置的专用语法创建的对象,而不是使用正常的语法创建对象(无论是什么)。
这里我创建了一个文字数组:
NSArray* a = @[@"Hello", @"World"];
对于与此相当的所有意图和目的:
NSArray* a = [NSArray arrayWithObjects:@"Hello", @"World", nil];
第一个称为文字,因为@[]
语法内置于用于创建数组的语言中,就像内置@"..."
语法来创建NSString
一样。
答案 1 :(得分:2)
正如@Linuxios所说,文字语法内置于该语言中。不过,它们比你想象的还要广泛。文字只意味着在源中编码实际值。所以ObjC中有很多文字语法。例如:
1
- int 1.0
- 双1.0f
- float "a"
- C-string @"a"
- NSString @[]
- NSArray ^{}
- 功能是的,块只是函数文字。它们是一个可分配给符号名称(例如变量或常量)的匿名值。
一般来说,文字可以存储在文本段中,并在编译时(而不是在运行时)进行计算。如果我没记错的话,数组文字当前被扩展为等效代码并在运行时进行评估,但@"..."
字符串文字被编码为二进制文件作为静态数据(至少现在它们是;非Apple版本的gcc用于编码一个实际的函数调用来构造我记得的静态字符串。
答案 2 :(得分:1)
术语'字面'用于引用类的实例
它并没有真正提到实例;在创建对象之后,创建它的方式并不重要:
NSArray * thisWasCreatedWithALiteral = @[@1, @2];
NSArray * butWhoCares = thisWasCreatedWithALiteral;
"字面" part只是特殊语法@[@1, @2]
和
它与它有关'字面意思'是一个字符串,在引号之间。
完全正确:这是数组的写出表示形式,而不是像arrayWithObjects: