读书笔记 ---- Effective Objective-C

2017-07-25  本文已影响15人  纳萨立克

1. 了解Objective-c

  1. OC是一种面向对象的语言

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

  1. OC也是使用头文件和实现文件来区隔代码的
  2. 在头文件中,如果只需要知道这是一个类,而并不需要知道这个类的实现等,则可以使用@class 类名字(即“向前声明”);而在实现文件中,我们可能就需要知道这个类接口细节,我们就需要在实现文件中使用 #import 类名
  • 头文件的引入时机需要尽量的延后,只在必须要引入的时候才引入,这样可以减少引入的头文件的数量,尽量的降低类之间的耦合性
  • 当无法使用向前声明的时候,不如遵循协议的时候,尽量把“该类遵循某协议”的声明移到“class-continuation分类中”。也可以把协议单独放在一个头文件中,然后将其引入

3. #import、#include、@class区别

import: 是OC种导入头文件的关键字 完整的包含了文件的整个内容

include:是C/C++导入头文件的关键字

@class:仅仅是声明一个类目,不会包含类里面的属性实现等

4. 多使用字面量语法,少使用与之等价的方法

  1. 使用字面量语法来创建字符串,数组,数组,字典。与创建此类的对象的常规方法相比较,这样会比较的简介扼要
  2. 应该通过取下标操作来访问数组下标或者字典中的key对呀的值
  3. 使用字面量创建数组和字典的时候,如果值中有nil,这会抛出异常,需要确保值里面不含有nil

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

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

enum DMTConnectionState {

    DMTConnectionStateDisconnected,
    DMTConnectionStateConnecting,
    DMTConnectionStateConnected,

};

enum DMTConnectionState state = DMTConnectionStateConnected;

typedef enum DMTConnectionState DMTConnectionState;
DMTConnectionState state = DMTConnectionStateConnected;

enum DMTConnectionState : NSInteger{
    DMTConnectionStateDisconnected,
    DMTConnectionStateConnecting,
    DMTConnectionStateConnected,
};

也可以不适用编译器分配的序号,而是手动指定某个枚举成员对应的值

//代码中我们手动给DMTConnectionStateDisconnected的值是1 而不是使用的系统分配的0,接下来的几个枚举都会在上一个基础上递增1.

enum DMTConnectionState{
    DMTConnectionStateDisconnected = 1,
    DMTConnectionStateConnecting,
    DMTConnectionStateConnected,
};
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
    UIViewAutoresizingNone                 = 0,
    UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,
    UIViewAutoresizingFlexibleWidth        = 1 << 1,
    UIViewAutoresizingFlexibleRightMargin  = 1 << 2,
    UIViewAutoresizingFlexibleTopMargin    = 1 << 3,
    UIViewAutoresizingFlexibleHeight       = 1 << 4,
    UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};

typedef NS_ENUM(NSUInteger,DMTConnectionState){

    DMTConnectionStateDisconnected,
    DMTConnectionStateConnecting,
    DMTConnectionStateConnected,  
};

typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
    UIViewAutoresizingNone                 = 0,
    UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,
    UIViewAutoresizingFlexibleWidth        = 1 << 1,
    UIViewAutoresizingFlexibleRightMargin  = 1 << 2,
    UIViewAutoresizingFlexibleTopMargin    = 1 << 3,
    UIViewAutoresizingFlexibleHeight       = 1 << 4,
    UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};
上一篇 下一篇

猜你喜欢

热点阅读