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:")));

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 2016-06-14 08:11编辑:cocopeng分类:iOS开发来源:汉斯哈哈哈的简书 34436 iOSY...
    橙娃阅读 725评论 0 1
  • YYCache源码分析(一) 文/汉斯哈哈哈(简书作者)原文链接:http://www.jianshu.com/p...
    kakukeme阅读 633评论 0 51
  • iOS 开发中总会用到各种缓存,YYCache或许是你最好的选择。性能上有优势,用法也很简单。作者ibireme曾...
    汉斯哈哈哈阅读 11,849评论 23 75
  • 前言 通过阅读别人的优秀源码,你会发现别人的开源API设计中,有一些宏你是经常忽略的,或者你不知道的。通过这些宏,...
    gitKong阅读 5,198评论 5 41
  • iOS宏的经典用法Apple的习惯attribute iOS宏的经典用法1.常量宏、表达式宏 define kTa...
    reallychao阅读 3,903评论 0 0