各種宏、聲明的作用

聲明

typedef

typedef struct objc_method *Method

//An opaque type that represents a method in a class definition.
//當(dāng)不想公開 結(jié)構(gòu)體 objc_method *類型的時候但又必須公開的時候,可以使用Method來替換


使用以下3個宏的注意點

  1. :這幾個宏定義只是決定代碼塊是否被編譯!
  2. :別忘了#endif

#if的使用說明

#if的后面接的是表達(dá)式
#if (MAX==10)||(MAX==20)
 code...
#endif
它的作用是:如果(MAX==10)||(MAX==20)成立,那么編譯器就會把其中的#if 與 #endif之間的代碼編譯進(jìn)去(注意:是編譯進(jìn)去,不是執(zhí)行!?。?

#if defined的使用

#if后面接的是一個宏。
#if defined (x)
    ...code...
#endif
這個#if defined它不管里面的“x”的邏輯是“真”還是“假”它只管這個程序的前面的宏定義里面有沒有定義“x”這個宏,如果定義了x這個宏,那么,編譯器會編譯中間的…code…否則不直接忽視中間的…code…代碼。
另外 #if defined(x)也可以取反,也就用 #if !defined(x)

#ifdef的使用

#ifdef的使用和#if defined()的用法一致
#ifndef又和#if !defined()的用法一致。
最后強調(diào)兩點:

NS_ASSUME_NONNULL_BEGIN;

NS_ASSUME_NONNULL_END

//表示下面開始的所有方法的參數(shù)、返回值,屬性、變量都是nonnull 類型的(不可為nil或者NULL)
#define NS_ASSUME_NONNULL_BEGIN _Pragma("clang assume_nonnull begin")
//結(jié)束
#define NS_ASSUME_NONNULL_END   _Pragma("clang assume_nonnull end")

不過,為了安全起見,蘋果還制定了幾條規(guī)則:

  1. typedef定義的類型的nullability特性通常依賴于上下文,即使是在Audited Regions中,也不能假定它為nonnull。
  2. 復(fù)雜的指針類型(如id *)必須顯示去指定是nonnull還是nullable。例如,指定一個指向nullable對象的nonnull指針,可以使用”__nullable id * __nonnull”。
  3. 我們經(jīng)常使用的NSError **通常是被假定為一個指向nullable NSError對象的nullable指針。
  4. 默認(rèn)為nullable(可以為nil或者NULL)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容