YYCache.h宏解析

YYCache.h tips

#if __has_include()
#import #import #import #elif __has_include()
#import #import #import #else
#import "YYMemoryCache.h"
#import "YYDiskCache.h"
#import "YYKVStorage.h"
#endif

__has_include:用来检查Frameworks是否引入某个类。

像YYWebImage已经集成YYCache,如果导入过YYWebImage则无需重新导入YYCache。

NS_ASSUME_NONNULL_BEGIN
@interface YYCache : NSObject
...
- (nullable instancetype)initWithName:(NSString *)name;
...
@end
NS_ASSUME_NONNULL_END

接口中nullable的是少数,一般都为nonnull,为了防止写一大堆nonnullFoundation供了一对宏NS_ASSUME_NONNULL_BEGINNS_ASSUME_NONNULL_END,包在里面的对象默认加nonnull修饰符,如果是nullable的,只需要把nullable的指出来就行。

- (instancetype)init UNAVAILABLE_ATTRIBUTE;
+ (instancetype)new UNAVAILABLE_ATTRIBUTE;

command+鼠标左键UNAVAILABLE_ATTRIBUTE

发现宏定义#define UNAVAILABLE_ATTRIBUTE __attribute__((unavailable)),

attribute是Clang提供的一种源码注解,方便开发者向编译器表达某种要求,括号里是传达某种命令.

为方便使用,一些常用属性也被Cocoa定义成宏,

比如UNAVAILABLE_ATTRIBUTENS_CLASS_AVAILABLE_IOS(9_0).

unavailable告诉编译器该方法失效.

在封装单例或初始化某个类前必须做一些事时,对一些方法禁用是非常不错的选择.

还可以给个message提示:

+ (instancetype)alloc __attribute__((unavailable("alloc方法不可用,请用initWithName:")));
- (instancetype)init __attribute__((unavailable("init方法不可用,请用initWithName:")));
+ (instancetype)new __attribute__((unavailable("new方法不可用,请用initWithName:")));
- (instancetype)copy __attribute__((unavailable("copy方法不可用,请用initWithName:")));

你可能感兴趣的:(YYCache.h宏解析)