《Effective Objective-C》笔记
1 了解 Objective-C 的起源
该语言使用“消息结构”(messaging structure)而非“函数调用”(function calling)。
2 在类的头文件中尽量少引入其他头文件
注意使用 @class
关键字。
3 多用字面量语法
使用字面量语法创建数组、字典,具有更高的可读性,代码也更简洁。
数值
NSNumber *intNumber = @1;
NSNumber *floatNumber = @2.5f;
数组
NSArray *animals = @[@"cat", @"dog", @"mouse", @"badger"];
字典
NSDictionary *personData =
@{@"firstName" : @"Matt",
@"lastName" : @"Galloway",
@"age" : @28};
4 多用类型常量,少用 #define
预处理指令
宏定义
#DEFINE ANIMATION_DURATION 0.3
类型常量
static const NSTimeInterval kAnimationDuration = 0.3
类型常量的命名规则:若常量只在某个类内部使用,加前缀 k;若在类之外可邮,则通常以类名为前缀。
注意常量定义的正确位置;如果需要在类内部使用:
// EOCAnimateView.m
#import "EOCAnimatedView.h"
static const NSTimeInterval kAnimationDuration = 0.3;
@implementation EOCAnimatedView
// ...
@end
如果需要暴露给外部,需要在头文件中声明,在实现文件中定义(赋值)。
// 这是某个头文件
extern NSString *const EOCStringConstant
// 刚才那个头文件对应的m文件
NSString *const EOCStringConstant = @"value";
5 用枚举表示状态、选项、状态码
学会使用 NS_ENUM
、NS_OPTIONS
两个宏
typedef NS_ENUM(NSUInteger, EOCConnectionState) {
EOCConnectionStateDisconnected,
EOCConnectionStateConnecting,
EOCConnectionStateConnected,
};
typedef NS_OPTIONS(NSUInteger, EOCPermittedDirection) {
EOCPermittedDirectionUp = 1 << 0,
EOCPermittedDirectionDown = 1 << 1,
EOCPermittedDirectionLeft = 1 << 2,
EOCPermittedDirectionRight = 1 << 3,
};
在使用 Switch 语句处理表达状态的 enum 时,最好不要加 default
。如果稍后在 enum 中增加了新的状态,编译器会发出警告。