为什么没有常量 NSArray Literal 和 NSDictionary Literal
Why there is No constant NSArray Literal and NSDictionary Literal
作为 apple 为数组字面量和字典字面量引入了新的语法:
NSArray* literalArray = @[@"1", @"2", @"3"];
//Dictionary Literal
NSDictionary* literalDictionary = @{@1:@"first", @2:@"Second", @3:@"Third"};
它们的行为不像字符串文字。我的问题是他们没有引入类似于 NSCFConstantString 的 NSCFConstantArray class 的原因是什么?
除了向后兼容性外,引入新的 class 会有什么缺点?
这需要在编译器中引入额外的 "inappropriate" 特定 Foundation 类 的知识,使其与 Apple 的框架更紧密地联系在一起,而不是成为通用编译器。
例如,它可能会干扰使用带有 GNUStep 的编译器而不是 Cocoa。
与 NSString
的集成由来已久,现在无法删除,但添加更多此类集成必须要有 确实 令人信服的论据.
这本来可以实现的,但可能不是很有用。为此,数组或字典中的所有内容也必须是编译时常量。这将是相当有限的——如果没有任何其他更改,您将只能创建仅包含字符串的数组和字典。数字文字也不是编译时常量。当然,这些也可以作为编译时常量实现。
但这整件事用处不大。大多数时候,您使用这些文字将一些仅在运行时已知的值放入数组或字典中。为实现所有这些而经历所有的麻烦可能不值得。
作为 apple 为数组字面量和字典字面量引入了新的语法:
NSArray* literalArray = @[@"1", @"2", @"3"];
//Dictionary Literal
NSDictionary* literalDictionary = @{@1:@"first", @2:@"Second", @3:@"Third"};
它们的行为不像字符串文字。我的问题是他们没有引入类似于 NSCFConstantString 的 NSCFConstantArray class 的原因是什么? 除了向后兼容性外,引入新的 class 会有什么缺点?
这需要在编译器中引入额外的 "inappropriate" 特定 Foundation 类 的知识,使其与 Apple 的框架更紧密地联系在一起,而不是成为通用编译器。
例如,它可能会干扰使用带有 GNUStep 的编译器而不是 Cocoa。
与 NSString
的集成由来已久,现在无法删除,但添加更多此类集成必须要有 确实 令人信服的论据.
这本来可以实现的,但可能不是很有用。为此,数组或字典中的所有内容也必须是编译时常量。这将是相当有限的——如果没有任何其他更改,您将只能创建仅包含字符串的数组和字典。数字文字也不是编译时常量。当然,这些也可以作为编译时常量实现。
但这整件事用处不大。大多数时候,您使用这些文字将一些仅在运行时已知的值放入数组或字典中。为实现所有这些而经历所有的麻烦可能不值得。