宏
序號 | 宏 | 作用 |
---|---|---|
1 | TARGET_IPHONE_SIMULATOR | 判斷是否是模擬器 |
2 | NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END | 中間的都不能為空 |
3 | NS_DESIGNED_INITIALIZER | 其他的初始化方法都必須要調(diào)用此方法 |
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
當(dāng)我們不遵循這一規(guī)則時乃坤,編譯器就會給出警告旬迹。
在NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END中間修飾的屬性都不能為空
參考鏈接:http://www.reibang.com/p/b3a31eed945f
3荣恐、NS_DESIGNED_INITIALIZER 其他的初始化方法都必須要調(diào)用此方法進行最后的初始化
init方法調(diào)用順序
init方法調(diào)用順序
參考鏈接:http://www.reibang.com/p/5654942cd8f7
4液斜、NS_UNAVAILABLE 禁用修飾的初始化方法
在初始化必須傳入某個參數(shù)化的時候,修飾其他的初始化方法
+ (instancetype)new NS_UNAVAILABLE;
- (instancetype)init NS_UNAVAILABLE; ///< 直接標(biāo)記 init 方法不可用
- (instancetype)initWithUserID:(NSNumber *)userID;/// 相當(dāng)于只能用此方法來初始化
參考鏈接:http://www.reibang.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"