资料

EOC 笔记 一

2017-02-28  本文已影响51人  Mokyz

一、熟悉 Objective-C


1、了解 Objective-C 语言的起源

// Messageing  OC
Object *obj = [Object new];
[obj performWith:parameter1 and:parameter2];
// Function calling C++
Objective *obj = new Object;
obj->perform(parameter1, parameter2);
NSString *someString = @"someString";

这是 OC 创建对象的例子。这里创建了一个 NSString 对象,但其实是创建了两个部分,一个是@"someString"是一个 NSString 实例,分配在堆中;另一部分是 someString 变量,是一个NSString*类型的指针,分配在栈中。


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

// 在 EOCPerson.h 文件中
@class EOCEmployer;
// 在 EOCPerson.m 文件中
#import "EOCEmployer.h"

这样可以减少类的使用者所需引入的头文件数量,比如如果在EOCPerson.h 中直接 #import EOCEmployer.h,那么在其他类中只要引入 EOCPerson.h 就会一并引入EOCEmployer.h,即使在该类中可能根本不会用到 EOCEmployer 类。这样就会额外引入无关的头文件,增加编译时间。


3、多用字面量语法,少用与之等价的方法


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

// 使用#define
#define ANIMATION_DURATION 0.3
// 使用常量类型
static const NSTimeInterval kAnimationDuration = 0.3;
// .o就是.m 文件最终被编译器编译后的目标文件。
duplicate symbol _kAnimationDuration in:
     EOCAnimatedView.o
     EOCOtherView.o
// 在.h 文件中
extern NSString *const EOCStringConstant;
// 在.m 文件中
NSString *cons EOCStringConstant = @"VALUE";

5、用枚举表示状态、选项、状态码

enum EOCConnectionState state {
       EOCConnectionStateDisconnected,
       EOCConnectionStateConnecting,
       EOCConnectionStateConnected
};

定义枚举变量的方法不太简洁:

enum EOCConnectionState state = EOCConnectionStateDisconnected;

使用typedef关键字重新定义枚举, 使用起来会更方便.

// 重新定义
typedef enum EOCConnectionState EOCConnectionState;
// 创建枚举变量
EOCConnectionState state = EOCConnectionStateDisconnected;
// 指定底层数据类型
enum EOCConnectionState state : NSInteger {...};
// 向前声明指定底层数据类型
enum EOCConnectionState state : NSInteger;
// 手工指定每个枚举成员对应的值
// 指定第一个成员值为1, 后续成员会在上一个的基础上加1
enum EOCConnectionState state {
       EOCConnectionStateDisconnected = 1,
       EOCConnectionStateConnecting,
       EOCConnectionStateConnected
};
enum UIViewAutoResizing {
        UIViewAutoResizingNone = 0,
        UIViewAutoResizingFlexibleLeftMargin = 1 << 0,
        UIViewAutoResizingFlexibleWidth = 1 << 1,
        ...
}
// 组合选项
emu UIViewAutoResizing resizing = UIViewAutoResizingFlexibleLeftMargin | UIViewAutoResizingFlexibleWidth;
// 定义普通枚举类型
typedef NS_ENUM (NSUInteger, EOCConnectionState) {...};
// 定义包含一系列选项的枚举
typedef NS_OPTIONS (NSUInteger, EOCConnectionState) {
       EOCConnectionStateDisconnected = 1 << 0,
       EOCConnectionStateConnecting = 1 << 1,
       EOCConnectionStateConnected = 1 << 2
};
上一篇 下一篇

猜你喜欢

热点阅读