iOS常用宏記錄收集

序號 作用
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中間修飾的屬性都不能為空

參考鏈接:http://www.lxweimin.com/p/b3a31eed945f

3、NS_DESIGNED_INITIALIZER 其他的初始化方法都必須要調用此方法進行最后的初始化
init方法調用順序

參考鏈接:http://www.lxweimin.com/p/5654942cd8f7

4、NS_UNAVAILABLE 禁用修飾的初始化方法

在初始化必須傳入某個參數化的時候,修飾其他的初始化方法

+ (instancetype)new NS_UNAVAILABLE;
- (instancetype)init NS_UNAVAILABLE; ///< 直接標記 init 方法不可用
- (instancetype)initWithUserID:(NSNumber *)userID;/// 相當于只能用此方法來初始化

參考鏈接:http://www.lxweimin.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"
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 在我們的工程中,很多時候只希望在滿足一定條件的時候才進行編譯,這是就需要用到條件編譯。 #if #elif #el...
    JerryLMJ閱讀 10,241評論 0 14
  • iOS開發過程中,使用的一些常用宏定義 字符串是否為空#define kStringIsEmpty(str) ([...
    goyohol閱讀 5,397評論 30 85
  • 來源于CocoaChina 在工作中, 很多小伙伴都會在PCH文件定義一些常用的宏,但是又怕寫這些簡單的宏浪費時間...
    iOS學末閱讀 832評論 3 7
  • 原文鏈接:http://www.lxweimin.com/p/213b3b96cafe 在工作中, 很多小伙伴都會在...
    為了你而活閱讀 441評論 0 3
  • 前言: 在工作中, 很多小伙伴都會在PCH文件定義一些常用的宏,但是又怕寫這些簡單的宏浪費時間,又有時候忘記怎么定...
    sherry155閱讀 482評論 0 0