宏
序号 | 宏 | 作用 |
---|---|---|
1 | TARGET_IPHONE_SIMULATOR | 判断是否是模拟器 |
2 | NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END | 中间的都不能为空 |
3 | NS_DESIGNED_INITIALIZER | 其他的初始化方法都必须要调用此方法 |
4 | NS_UNAVAILABLE | 禁用修饰的初始化方法 |
5 | if __has_include | 通过宏定义判断是否引入的是framework,反之则使用双引号 |
6 | FOUNDATION_EXPORT | 定义常量,类似Define |
1、TARGET_IPHONE_SIMULATOR 判断是否是模拟器
#ifdef TARGET_IPHONE_SIMULATOR
XXXXX 模拟器时会编译的代码
#else
XXXXX 不是模拟器才会编译的代码
#endif
2、NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END 中间的都不能为空
__nullable && ___nonnull
__nullable指代对象可以为NULL或者为NIL
__nonnull指代对象不能为null
当我们不遵循这一规则时,编译器就会给出警告。
在NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END中间修饰的属性都不能为空
参考链接:https://www.jianshu.com/p/b3a31eed945f
3、NS_DESIGNED_INITIALIZER 其他的初始化方法都必须要调用此方法进行最后的初始化 init方法调用顺序
参考链接:https://www.jianshu.com/p/5654942cd8f7
4、NS_UNAVAILABLE 禁用修饰的初始化方法
在初始化必须传入某个参数化的时候,修饰其他的初始化方法
+ (instancetype)new NS_UNAVAILABLE;
- (instancetype)init NS_UNAVAILABLE; ///< 直接标记 init 方法不可用
- (instancetype)initWithUserID:(NSNumber *)userID;/// 相当于只能用此方法来初始化
参考链接:https://www.jianshu.com/p/5654942cd8f7
5、if __has_include 通过宏定义判断是否引入的是framework,反之则使用双引号
#if __has_include(<TestHead/TestHead.h>)
#import <TestHead/TestHead.h>
#else
#import "TestHead.h"
#endif
6、FOUNDATION_EXPORT 定义常量
.h文件
FOUNDATION_EXPORT NSString *const kMyConstantString;
.m文件是这样定义的
NSString *const kMyConstantString = @"hello world";
另一种就是常用的#define 方法定义常量了
#define kMyConstantString @"Hello"
网友评论