前言#
block ,枚举字符串,内敛函数学习
block 声明#
typedef void(^SDWebImageNoParamsBlock)(void);枚举字符串#
typedef NSString * SDWebImageContextOption NS_EXTENSIBLE_STRING_ENUM;
//SDWebImageContextOption类型
//NS_EXTENSIBLE_STRING_ENUM 可用于swift 枚举字符串
//SDWebImageContextOptionFOUNDATION_EXPORT#
效率比较比#define 高,是地址的比较,在定义常量字符串时,要写在两个文件里面。
//.h
FOUNDATION_EXPORT NSString *const kMyConstantString;
//.m
NSString *const kMyConstantString = @"hello world";#define kMyConstantString @"hello world"//只在.h 文件使用
- FOUNDATION_EXPORT 有如下两点作用
Visible Symbolity
Compatibility to other source code.
内敛函数#
可直接进行调用函数
//.h文件
FOUNDATION_EXPORT CGFloat SDImageScaleFactorForKey(NSString * _Nullable key);
//.m文件
inline CGFloat SDImageScaleFactorForKey(NSString * _Nullable key) {
CGFloat scale = 1;
if (!key) {
return scale;
}
}
//内联函数移位枚举#
- NS_OPTIONS
这种枚举用来处理多情况,也就是说既能响应开始的情况,又能输出之后的情况,
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
};补充#
- 应该用枚举表示状态机的状态、传递给方法的选项以及状态码等值,给这些值起个易懂的名字,就像监听网络状态的枚举。
- 如果把传递给某个方法的选项表示为枚举类型,而多个选项又可同时使用,那么就将各选项定义为 2 的幂,以便通过按位或操作将其组合起来。
- 用 NS_ENUM 与 NS_OPTIONS 宏来定义枚举类型,并指明其底层数据类型。这样可以确保枚举是用开发者所选的底层数据类型实现出来的,而不会采用编译器所选的类型
- 在处理枚举类型的 switch 语句中不要实现 default 分支。这样的话,加入新枚举之后,编译器就会提示开发者:switch 语句并未处理所有枚举