ns_enum與ns_options區別與說明
我們根據兩種定義常見的使用場景來說明其區別。
ns_enum
typedef ns_enum(nsinteger, uiviewanimationtransition) ;12
3456
7說明:
ns_enum 的第乙個引數是用於儲存的新型別的型別。在64位環境下,uiviewanimationtransition和 nsinteger 一樣有8bytes長。你要保證你給出的所有值能被該型別容納,否則就會產生錯誤。第二個引數是新型別的名字。大括號裡面和以前一樣,是你要定義的各種值。
一般列舉項加上字尾以視區別,大括號中的列舉項的值預設是從0開始連續遞增,可自定義,若是定義了列舉項其中一項的值後面依次在它的前一項的值上加1,如這樣:
typedef ns_enum(nsinteger, uiviewanimationtransition) ;
或typedef ns_enum(nsinteger, uiviewanimationtransition) ;12
3456
78910
1112
1314
15當然也可以簡寫為如下寫法,但是不推薦。
typedef enum uiviewanimationtransition;12
3456
7ns_options
typedef ns_options(nsuinteger, uiswipegesturerecognizerdirection) ;12
3456
7enum 也可以被定義為按位掩碼(bitmask)。用簡單的or (|)和and (&)數**算即可實現對乙個整型值的編碼。每乙個值不是自動被賦予從0開始依次累加1的值,而是手動被賦予乙個帶有乙個bit偏移量的值:類似1 << 0、 1 << 1、 1 << 2等。如果你能夠心算出每個數字的二進位制表示法,例如:10110 代表 22,每一位都可以被認為是乙個單獨的布林值。例如在uikit中, uiswipegesturerecognizerdirection就是乙個可以表示任何right、left、up 或down組合的位掩碼。
不像 ns_enum ,位掩碼用 ns_options 巨集。
語法和 ns_enum 完全相同,但這個巨集提示編譯器值是如何通過位掩碼 | 組合在一起的。同樣的,注意值的區間不要超過所使用型別的最大容納範圍。小括號中第乙個為nsuinteger這個為固定值,第二個為自定義的列舉型別,列舉項後面再跟上幾個值的區別,這裡列舉項是nsuinteger型別,一般用來定義位移相關操作。
類似的,這個也可以簡寫為:
typedef enum uiswipegesturerecognizerdirection;
iOS中特有的NS ENUM和NS OPTIONS
一般情況下,我們採用c風格的enum關鍵字可以定義列舉型別。enum uiviewanimationtransition 位移操作列舉定義 enum typedef nsuinteger uiviewautoresizing 使用nsuinteger的地方可以使用uiviewautoresizing...
SQL與NoSQL MySQL與NoSQL的融合
寫這一篇內容的原因是mysql5.6.2突然推出了memcached的功能。nosql to innodb with memcached的出現,可以看出nosql對關聯式資料庫的確產生了巨大的影響,個人覺得這是乙個非常大的進步,可以讓開發人員更加方便的使用nosql和關聯式資料庫。nosql一般被認...
指標與陣列 a與 a區別
假設宣告了乙個陣列a,則 a表示陣列a的首位址,a與 a 0 表示陣列a首元素的首位址,那麼 a 1與a 1有哪些區別呢?通過下面的實驗來說明。int i 0 int a 5 int p int a 1 for i 0 i 5 i printf a 0x p,a 0x p,a 1 0x p n a,...