• 编写高质量 Objective-C 代码


    第一章 熟悉 Objective-C

    第一条:了解 Objective-C 起源

    Objective-C 是 C 语言动态性扩充。使用“消息结构”而非“函数调用”,因为继承了 Smalltalk 的语言风格。消息与函数的区别如下:

    1
    2
    3
    4
    5
    6

    Object *obj = [Object new];
    [obj performWith:parameter1 and:parameter2];
    // Function calling(C++)
    Object *obj = new Object;
    obj -> perform(parameter1,parameter2);

    关键区别在于:使用消息结构的语言,其运行时执行的代码由运行环境决定;而函数调用的语言,由编译器决定。

    Objective-C 重要工作都由“运行期组件”而非编译器完成的。它的面向对象的特性所需的数据结构和函数全在运行期组件里面。例如:运行期组件含有全部的内存管理方法。

    第二条:在类的头文件中尽量少引入其他头文件

    1. 除非特殊需要,否则不要引入头文件。尽量在头文件中使用向前声明,在实现文件引入所使用的头文件,这样做可以尽量降低类之间的耦合。
    2. 有时无法使用向前声明,比如声明某个类遵守一项协议。这种情况下,尽量把该遵守该协议的声明放在分类里,在分类的实现文件中实现协议方法,这样能够降低依赖和耦合度。

    第三条:多用字面量语法,少用与之等价的方法

    使用字面量能够缩减代码长度,使其更为易读。

    1. 字面量创建 NSString、NSNumber、NSArray、NSDictionry 更加简明扼要
    2. 字面量穿件字典和数组时候,遇到 nil 会抛出异常。

    第四条:多用类型常量,少用 #define 预处理指令

    1
    2
    #define ANIMATION_DURATION 0.3              
    static const NSTimeInterval KAnimationDuration = 0.3

    某个类文件内部使用的常量需要添加 static 修饰符,不然编译器会给他创建一个“外部符号”,会与其他文件中同名的命名冲突。

    static 修复局部变量,编译阶段初始化,保存在静态数据区,延长生命周期。修饰全部变量,改变变量的影响域

    假如需要提供外部使用的常量做法

    1
    2
    extern NSString *const RJNotifacitionName;  // .h文件声明
    NSString *const RJNotifacitionName = @"RJNotifacitionName"; //.m文件
    大专栏  编写高质量 Objective-C 代码ure>

    const 修饰符从有右到左看,上面就是一个不可变指针

    第五条:用枚举表示状态、选项、状态码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    // C语言枚举风格
    enum RJNetState {
    RJNetSuccess,
    RJNetFailure
    };
    typedef enum RJNetState RJNetState;
    RJNetState state = RJNetFailure;
    // 系统枚举宏快速创建
    typedef NS_ENUM(NSInteger, RJNetState) {
    RJNetSuccess,
    RJNetFailure
    };
    typedef NS_OPTIONS(NSInteger, RJDirection) {
    RJDirectionTop = 1 << 0,
    RJDirectionLeft = 1 << 1,
    RJDirectionBottom = 1 << 2,
    RJDirectionRight = 1 << 3,
    };

    第二章 对象、消息、运行期

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

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

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

    第九条:以“类族模式“隐藏实现细节

    第十条:在既有类中使用关联对象存放自定义数据

    第十一条:理解 objc_msgSend 的作用

    第十二条:理解消息转发机制

    第十三条:用”方法调配技术“调试”黑盒方法“

    第十四条:理解类对象的用意

  • 相关阅读:
    ironic port bind
    pdb /usr/bin/neutron-server
    networking_generic_switch
    [CodeForces586D]Phillip and Trains
    [CodeForces598D]Igor In the Museum
    [poj3468]A Simple Problem with Integers
    [bzoj1503][NOI2004]郁闷的出纳员
    [bzoj1208][HNOI2004]宠物收养所
    [luogu3384][模板]树链剖分
    [CodeForces869A]The Artful Expedient
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12302359.html
Copyright © 2020-2023  润新知