常用宏: UNAVAILABLE_ATTRIBUTE , __has_include

__has_include

功能是检测到某个文件,是否在工程中被包含.

#if __has_include(<YYCache/YYCache.h>)
FOUNDATION_EXPORT double YYCacheVersionNumber;
FOUNDATION_EXPORT const unsigned char YYCacheVersionString[];
#import <YYCache/YYMemoryCache.h>
#import <YYCache/YYDiskCache.h>
#import <YYCache/YYKVStorage.h>
#elif __has_include(<YYWebImage/YYCache.h>)
#import <YYWebImage/YYMemoryCache.h>
#import <YYWebImage/YYDiskCache.h>
#import <YYWebImage/YYKVStorage.h>
#else
#import "YYMemoryCache.h"
#import "YYDiskCache.h"
#import "YYKVStorage.h"
#endif

NS_ASSUME_NONNULL_BEGINNS_ASSUME_NONNULL_BEGIN

因为OC为了配合Swift的Option类型, 提供了__nullable__nonnull 指定指针类型是否为空

  • __nullable : 对象可以为nil
  • __nonnull : 对象不能为nil

当我们不遵循这一规则时,编译器就会给出警告。

给每个属性或方法一一指定的话很繁琐, 使用提供了 NS_ASSUME_NONNULL_BEGINNS_ASSUME_NONNULL_BEGIN 简化工作量. 被两个宏包裹的代码, 所有简单指针对象都被假定为 __nonnull 即 不为nil, 如果可能为空的则再特殊指定.

NS_DESIGNATED_INITIALIZER

用来定义一些初始化方法只能过来这些标记的初始化

应该是配合Swift的指定构造函数

- (nullable instancetype)initWithPath:(NSString *)path NS_DESIGNATED_INITIALIZER;

UNAVAILABLE_ATTRIBUTE

告知方法失效

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

关键字 inline

内联关键字

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

推荐阅读更多精彩内容