为什么没有常量的NSArray Literal和NSDictionary Literal

时间:2017-01-08 11:07:56

标签: objective-c nsarray foundation

Apple为数组文字和字典文字引入了一种新语法:

NSArray* literalArray = @[@"1", @"2", @"3"];

//Dictionary Literal
NSDictionary* literalDictionary = @{@1:@"first", @2:@"Second", @3:@"Third"};

它们的行为不像String文字。我的问题是他们没有引入类似于NSCFConstantString的NSCFConstantArray类的原因是什么? 除了向后兼容性之外,引入新类会有什么缺点?

2 个答案:

答案 0 :(得分:3)

这可能已经实施,但它可能不会非常有用。为此,数组或字典中的所有内容都必须是编译时常量。这将是相当有限的 - 没有任何其他更改,您只能创建只包含字符串的数组和字典。数字文字也不是编译时常量。当然,这些也可以作为编译时常量实现。

但这整件事情并不是很有用。大多数情况下,您使用这些文字将一些仅在运行时已知的值放入数组或字典中。实现所有这些可能不值得经历所有麻烦。

答案 1 :(得分:0)

这需要将特定基础类的其他“不适当”知识引入编译器,将其与Apple的框架更紧密地联系起来,而不是作为通用编译器。

例如,它可能会干扰使用GNUStep编译器而不是Cocoa。

NSString的集成是长期存在的,现在无法删除,但添加更多此类集成必须有一个真正令人信服的参数。