iOS中使用常量 enum 巨集,以及各自的使用場景

2021-07-12 05:39:45 字數 3224 閱讀 8256

重要的事情首先說:在ios開發中請盡量多使用const、enum來代替巨集定義(#define);隨著專案工程的逐漸增大,過多的巨集定義還可能影響專案的編譯速度。

1.巨集在編譯開始之前就會被替換,而const只是變數進行修飾;

2.巨集可以定義一些函式方法,const不能

3.巨集編譯時只替換不做檢查不報錯,也就是說有重複定義問題。而const會編譯檢查,會報錯

定義全域性變數的時候,我們應該盡量先考慮使用 static 方式聲名const來替代使用巨集定義。const不能滿足的情況再考慮使用巨集定義。比如用以下定義:

1

2

static nsstring * const classnameconst = @"hello"

static const cgfloat classnamewidth = 10.0;

代替:1

2

#define classnamedefine @"hello"

#define classnamewidth 10.0

對於整型型別,代替巨集定義直接定義整型常量比較好的辦法是使用enum,使用enum時推薦使用ns_enum和ns_options巨集。比如用以下定義:

1

2

3

typedef ns_enum(nsinteger,testenum) ;

代替:1

#define my_int_const 12345

ns_options定義方式如下:

1

2

3

4

5

6

typedef ns_options(nsinteger, selecttype) ;

下面順便說一下const 的一些使用方式,主要說明這幾種寫法的區別:1

2

3

4

5

const nsstring *conststring1 = @"i am a const nsstring * string";

nsstring const *conststring2 = @"i am a nsstring const * string";

static const nsstring *staticconststring1 = @"i am a static const nsstring * string";

static nsstring const *staticconststring2 = @"i am a static nsstring const * string";

nsstring * const stringconst = @"i am a nsstring * const string";

全域性變數:1

2

3

4

5

6

//全域性變數,conststring1位址不能修改,conststring1值能修改

const nsstring *conststring1 = @"i am a const nsstring * string";

//意義同上,無區別

nsstring const *conststring2 = @"i am a nsstring const * string";

// stringconst 位址能修改,stringconst值不能修改

nsstring * const stringconst = @"i am a nsstring * const string";

conststring1 跟conststring2 無區別,外部使用要配合extern欄位如:

在viewcontroller.m中定義全域性變數在testviewcontroller.m中使用需要使用

1

2

extern nsstring *conststring1;

nslog(@"conststring1:%@\n",conststring1);

區域性常量:1

2

3

4

//作用域只在本檔案中,在其他類中使用需引用定義的類

static const nsstring *staticconststring1 = @"i am a static const nsstring * string";

static nsstring const *staticconststring2 = @"i am a static nsstring const * string";

//---------------------------

總結:巨集定義能用const,enum替換的以後就少用巨集定義吧。

enum和巨集定義的區別以及其使用

首先是enum的使用一段簡單的 include include using namespace std enum day void test int sunny return 0 關於為什麼使用列舉型別和好處 相比簡單的數字0,1.使程式更有可讀性。下面將與巨集定義進行乙個比較。1 編譯器處理方式不...

iOS常用數學常量巨集

在實際工作中有些程式不可避免的需要使用數學函式進行計算,比如地圖程式的地理座標到地圖座標的變換。objective c做為ansi c的擴充套件,使用c標準庫標頭檔案中定義的數學常量巨集及數學函式來實現基本的數學計算操作,所以不必費神再在cocoa foundation中尋找相應的函式和類了。這裡列...

hibernate中使用enum型別

1.在pojo 實體類中定義了乙個customer 類和乙個枚舉子類partner.class customer class enum partner 在寫入資料庫的時候,可以選擇寫入int 型別或者string 型別.這個取決於配置.下面的配置是寫入字串到資料庫中 import j ax.pers...