熟悉 Objective-C

Wednesday, January 3, 2018

了解 Objective-C 语言的起源

  • Objective-C 是消息结构,不是函数调用
  • 使用消息结构的语言,其运行时所应执行的代码由运行环境来决定
  • 使用函数调用的语言,则由编译器决定
  • 采用消息结构的语言,不论是否多态,总是在运行时才会去查找所要执行的方法(动态绑定)。
  • 对象所占内存总是分配在堆空间,而绝不会分配在栈空间。
  • 不含*的变量,一般可能是使用栈空间

在类的头文件中尽量少引入其他头文件

  • 尽量使用『向前声明』@class ,减少编译时间,解决相互引用问题
  • 协议必须要#import 的,为了避免这个问题,最好把协议单独放到一个头文件中。

多用字面量语法声明对象

  • 用字面量语法创建数组或字典时,若有nil,则会抛出异常

多用类型常量,少用#define 预处理指令

  • 变量一定要同时用 static 与 const 来声明。
  • static 修饰符意味着该变量仅在该类的实现文件(.m)。假如此变量不加 static,则编译器会为它创建一个『外部符号』 external,此时若是另一个编译单元中也声明了同名变量,那么编译器就抛出一条错误消息。
  • 如果需要『全局符号表』,应该如下定义
//.h
extern NSString *const StringConstant
//.m
NSString *const StringConstant = @"lemon"

用枚举表示状态,选项,状态码

  enum LLConnectionState {
             LLConnectionStateDisconnected,
             LLConnectionStateConnecting,
             LLConnectionStateConnected,
    };
    
    typedef enum LLConnectionState LLConnectionState;
    
    LLConnectionState state = LLConnectionStateDisconnected;
  • 若想选项可以彼此组合,各选项之间可以用按位或操作符来组合
   enum UIViewAutoresizing {
            UIViewAutoresizingNone                         = 0,
            UIViewAutoresizingFlexibleLeftMargin       = 1 << 0,
            UIViewAutoresizingFlexibleWidth           = 1 << 1,
            UIViewAutoresizingFlexibleRightMargin     = 1 << 2,
    }
  • 在处理枚举类型的 switch 语句最好不要实现 default 分支,这样加入新枚举之后,编译器就会提示开发者。
Objective-CiOS

对象,消息,运行期