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
,为了防止写一大堆nonnull
,Foundation供了一对宏NS_ASSUME_NONNULL_BEGIN
、NS_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_ATTRIBUTE
、NS_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:")));