字面值

作者: 小狄爱玩雪 | 来源:发表于2016-01-13 14:22 被阅读42次

(转自https://github.com/oa414/objc-zen-book-cn 禅与 Objective-C 编程艺术 )

使用字面值来创建不可变的NSString,NSDictionary,NSArray, 和NSNumber对象。注意不要将nil传进NSArray和NSDictionary里,因为这样会导致崩溃。

例子:

NSArray*names = @[@"Brian",@"Matt",@"Chris",@"Alex",@"Steve",@"Paul"];NSDictionary*productManagers = @{@"iPhone":@"Kate",@"iPad":@"Kamal",@"Mobile Web":@"Bill"};NSNumber*shouldUseLiterals = @YES;NSNumber*buildingZIPCode = @10018;

不要这样:

NSArray*names = [NSArrayarrayWithObjects:@"Brian",@"Matt",@"Chris",@"Alex",@"Steve",@"Paul",nil];NSDictionary*productManagers = [NSDictionarydictionaryWithObjectsAndKeys:@"Kate",@"iPhone",@"Kamal",@"iPad",@"Bill",@"Mobile Web",nil];NSNumber*shouldUseLiterals = [NSNumbernumberWithBool:YES];NSNumber*buildingZIPCode = [NSNumbernumberWithInteger:10018];

如果要用到这些类的可变副本,我们推荐使用NSMutableArray,NSMutableString这样的类。

应该避免下面这样:

NSMutableArray*aMutableArray = [@[]mutableCopy];

上面这种书写方式的效率和可读性的都存在问题。

效率方面,一个不必要的不可变对象被创建后立马被废弃了;虽然这并不会让你的 App 变慢(除非这个方法被频繁调用),但是确实没必要为了少打几个字而这样做。

可读性方面,存在两个问题:第一个问题是当你浏览代码并看见@[]的时候,你首先联想到的是NSArray实例,但是在这种情形下你需要停下来深思熟虑的检查;另一个问题是,一些新手以他的水平看到你的代码后可能会对这是一个可变对象还是一个不可变对象产生分歧。他/她可能不熟悉可变拷贝构造的含义(这并不是说这个知识不重要)。当然,不存在绝对的错误,我们只是讨论代码的可用性(包括可读性)。

相关文章

  • 2.2 变量

    一、学习要求 书籍参考章节: 第3章 知识点: 字面值 变量 常量 关键字 标识符 二、参考知识 字面值 字面值是...

  • java语法基础

    常量 常量 : 在程序执行过程中,其值不能改变 Java中常量的分类 字面值常量 自定义常量 字面值常量的分类 字...

  • 如果您是客户是会用掉还是会收藏?

    某某4S店打算发行具有一定收藏价值的 面值100的×3 面值50的×2 面值20的×2 面值10×3 面值2×5 ...

  • 字面值

    在C语言里,一切表达式都有值;字面值,形如“21”,“88.3F”等,是字面形式输入到源代码的值。 有值就需要存放...

  • 字面值

    (转自https://github.com/oa414/objc-zen-book-cn 禅与 Objective...

  • Java基础之常量与变量(5)

    布尔类型的字面值 这里简单介绍下字面值的概念,我们可能在很多方面把字面值叫...

  • Java中的字面值

    什么是字面值? 字面值就是可以直接看到是多少的数据,在程序运行中其值不能发生改变。 字面值分类

  • 【题目1】硬币面值组合

    问题描述 评测题目: 给定 m 种面值的硬币,每种面值的硬币有无限多个,它们的面值分别为C=[c[0], c[1]...

  • 3元福字币

    2015年开始,人民银行发行3元福字贺岁纪念银币系列,这个系列有很多特别的地方,比如面值3元,乾隆手书“福”字等小...

  • 字面值,变量

    1:什么是字面值? 一眼看上去就知道多少就是字面值 字面值就是内存中的一块空间,这块空间有类型,有值, 例~10整...

网友评论

      本文标题:字面值

      本文链接:https://www.haomeiwen.com/subject/ioyckttx.html