美文网首页
《编写高质量iOS与OS X代码的52个有效方法》6-9

《编写高质量iOS与OS X代码的52个有效方法》6-9

作者: 小如99 | 来源:发表于2018-06-27 22:32 被阅读18次

    第6条:理解“属性”这一概念

    需要理解的概念:对象、消息传递、Object-C运行期环境
    属性的相关概念:存取方法/获取方法/设置方法/点语法/自动合成/应用程序二进制接口(Application Binary Interface,ABI)
    ABI定义了许多内容,其中一项就是生成代码时所应遵循的规范。
    属性的特质:

    1. 原子性(atomicity/nonatomic)
    2. 读/写权限(readonly/readwrite)
    3. 内存管理语义(assign/strong/weak/unsafe_unretained/copy)
    4. 方法名(getter/setter)

    要点:

    • 可以用@property语法来定义对象中所封装的数据。
    • 通过“特质”来指定存储数据所需的正确定义
    • 在设置属性所对应的实例变量时,一定要遵从该属性所声明的语义。
    • 开发iOS程序时应该使用nonatomic属性,因为atomic属性会严重影响性能。

    第7条:在对象内部尽量直接访问实例变量

    直接访问实例变量存在的现象:

    1. 不经过OC的“方法派发”步骤,访问速度比较快;
    2. 不会调用设置方法,绕过了为相关属性所定义的“内存管理语义”;
    3. 不会触发KVO;
    4. 不方便打断点

    要点:

    • 在对象内部读取数据时,应该直接通过实例变量来读,而写入数据时,则应通过属性来写。
    • 在初始化方法及dealloc方法中,总是应该通过实例变量来读写数据,因为担心子类会重写存取方法。
    • 有时会使用惰性初始化技术配置某份数据,这种情况下,需要通过属性来读取数据。
    • 开发iOS程序时应该使用nonatomic属性,因为atomic属性会严重影响性能。

    第8条:理解”对象等同性“这一概念

    这一点完全没看太懂,要多看几遍
    参考文章:iOS开发 之 不要告诉我你真的懂isEqual与hash!

    isEqual的原理就是先判断A/B两个对象的指针是否一致,再判断A、B是否为同一类,最后判断A、B的属性值是否一致,如果是NSSet和NSDictionary类则应该判断hash值,如果hash值一致再判断对象。 不知道是不是这么理解的。

    要点:

    • 若想检测对象的等同性,请提供"isEqual:"与hash方法。
    • 相同的对象必须具有相同的hash码,但是两个哈希码相同的对象却未必相同。
    • 不要盲目的逐个检测每条属性,而是应该依照具体需求来制定检测方案。
    • 编写hash方法时,应该使用计算速度快而且哈希码碰撞几率低的算法。

    第9条:以“类簇模式”隐藏实现细节

    类簇 是一群隐藏在通用接口下的与实现相关的类,使得我们编写的代码可以独立于底层实现(因为接口是稳定的)。

    如创建NSString对象时,你得到的可能是NSLiteralString,NSCFString,NSSimpleCString等。即不同的NSString对象调用同一个接口A,接口A的实现可能是不同的。

    Foundation框架中,常见的类簇有NSString,NSArray,NSDictionary,NSSet等collection类。 想要在类簇中创建子类会困难一些,必须是抽象超类的子类,必须重载超类的原始方法,必须声明自己的数据存储。最方便的是使用组合或者类别来代替子类化。

    要点:

    • 类蔟模式可以把实现细节隐藏在一套简单的公共接口后面。
    • 系统框架中经常使用类蔟。
    • 从类蔟的公共抽象基类中继承子类时要当心,若有开发文档,则应首先阅读。

    相关文章

      网友评论

          本文标题:《编写高质量iOS与OS X代码的52个有效方法》6-9

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