2

Something that is bothering me is why the term 'literal' is used to refer to instances of classes like NSString and NSArray. I had only seen the term used in reference to NSString and being naive I thought it had something to do with it 'literally' being a string, that is between quotation markers. Sorry if that sounds pathetic, but that was how I had been thinking about it.

Then today I learned that certain instances of NSArray can also be referred to as literal instances, i.e. an instance of the class created using a 'literal syntax'.

4

3 回答 3

2

正如@Linuxios 所指出的,语言中内置了文字语法。不过,它们比你想象的要广泛。文字只是意味着在源中编码了实际值。所以在 ObjC 中有相当多的字面语法。例如:

  • 1- 整数
  • 1.0- 双倍的
  • 1.0f- 漂浮
  • "a"- C字符串
  • @"a"- NSString
  • @[]- NSArray
  • ^{}- 功能

是的,块只是函数文字。它们是可分配给符号名称(例如变量或常量)的匿名值。

一般来说,文字可以存储在文本段中,并在编译时(而不是在运行时)计算。如果我没记错的话,数组文字当前被扩展为等效代码并在运行时进行评估,但@"..."字符串文字被编码为二进制数据作为静态数据(至少现在它们是;用于编码实际函数调用的非 Apple 版本的 gcc我记得构造静态字符串)。

于 2015-02-04T20:36:32.503 回答
2

文字语法或文字只是使用内置于语言中的专用语法创建的对象,而不是使用用于对象创建的正常语法(无论是什么)。

在这里,我创建了一个文字数组:

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

也就是说,出于与此等效的所有意图和目的:

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

第一个被称为字面量,因为该@[]语法内置于用于创建数组的语言中,就像@"..."内置用于创建NSStrings 的语法一样。

于 2015-02-04T20:02:31.960 回答
1

术语“文字”用于指代类的实例

它实际上并不是指实例。创建对象后,创建方式无关紧要:

NSArray * thisWasCreatedWithALiteral = @[@1, @2];
NSArray * butWhoCares = thisWasCreatedWithALiteral;

“文字”部分只是特殊语法@[@1, @2],并且

它与它“字面上”是一个字符串有关,即在引号之间。

完全正确:这是数组的写出表示,而不是使用构造函数方法创建的表示arrayWithObjects:

于 2015-02-04T20:33:04.430 回答