[OC Runtime編程指南_翻譯]七、類型編碼

[OC Runtime編程指南_翻譯]一次兆、介紹
[OC Runtime編程指南_翻譯]二、運行時版本和平臺
[OC Runtime編程指南_翻譯]三锹锰、與運行時交互
[OC Runtime編程指南_翻譯]四芥炭、消息傳遞
[OC Runtime編程指南_翻譯]五、動態(tài)方法解析
[OC Runtime編程指南_翻譯]六恃慧、消息轉發(fā)
[OC Runtime編程指南_翻譯]七园蝠、類型編碼
[OC Runtime編程指南_翻譯]八、聲明屬性

注:pdf翻譯文檔百度云下載鏈接痢士,密碼:zcs2

為了幫助運行時系統(tǒng)彪薛,編譯器將每個方法的返回和參數(shù)類型編碼為字符串,并將字符串與方法選擇器相關聯(lián)良瞧。它使用的編碼方案在其他上下文中也很有用陪汽,因此可以通過@encode()編譯器指令公開使用。當給定類型規(guī)范時褥蚯,@encode()返回對該類型進行編碼的字符串挚冤。類型可以是基本類型,如int赞庶、指針训挡、帶標記的結構或聯(lián)合澳骤,也可以是任何類型的類名,事實上澜薄,任何類型都可以用作C sizeof()運算符的參數(shù)为肮。

char *buf1 = @encode(int **);

char *buf2 = @encode(struct key);

char *buf3 = @encode(Rectangle);

下表列出了類型代碼。請注意肤京,其中許多代碼與您在為存檔或分發(fā)而對對象進行編碼時使用的代碼重疊颊艳。但是,這里列出了一些您在編寫編碼器時不能使用的代碼忘分,還有一些代碼可能需要在編寫不是由@encode()生成的編碼器時使用棋枕。(請參閱《基礎框架參考》中的 NSCoder類規(guī)范,以獲取有關為存檔或分發(fā)對象編碼的更多信息。)

Table 6-1 Objective-C type encodings

Code Meaning
c A char
i An int
s A short
l A long,l is treated as a 32-bit quantity on 64-bit programs.
q A long long
C An unsigned char
I An unsigned int
S An unsigned short
L An unsigned long
Q An unsigned long long
f A float
d A double
B A C++ bool or a C99 _Bool
v A void
* A character string (char *)
@ An object (whether statically typed or typed id)
# A class object (Class)
: A method selector (SEL)
[array type] An array
{name=type...} A structure
(name=type...) A union
bnum A bit field of num bits
^type A pointer to type
? An unknown type (among other things, this code is used for function pointers)

重要提示:Objective-C不支持long double類型乐导。@encode(long double)返回d,這與double的編碼相同窥浪。

數(shù)組的類型代碼用方括號括起來;數(shù)組中的元素數(shù)在左括號后緊跟數(shù)組類型之前指定笛丙。例如漾脂,一個由12個指向浮點的指針組成的數(shù)組將被編碼為:

[12^f]

結構體大括號內(nèi)指定,聯(lián)合體括號內(nèi)指定胚鸯。首先列出結構標記符相,然后是等號和按順序列出的結構字段的代碼。例如蠢琳,一個結構

typedef struct example {
    id   anObject;
    char *aString;
    int  anInt;
} Example;

編碼方式如下:

{example=@*i}

無論定義的類型名(Example)還是結構標記(Example)傳遞給@encode(),都會產(chǎn)生相同的編碼結果镜豹。結構指針的編碼攜帶與結構字段相同的信息量:

^{example=@*i}

但是傲须,另一個間接級別會刪除內(nèi)部類型規(guī)范:

^^{example}

對象被視為結構。例如趟脂,將NSObject類名傳遞給@encode()將生成以下編碼:

{NSObject=#}

NSObject類只聲明一個class類型的實例變量isa泰讽。

注意,盡管@encode()指令沒有返回它們昔期,但是當類型限定符用于聲明協(xié)議中的方法時已卸,運行時系統(tǒng)使用表6-2中列出的附加編碼。

Table 6-2 Objective-C方法編碼

Code Meaning
r const
n in
N inout
o out
O bycopy
R byref
V oneway
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末硼一,一起剝皮案震驚了整個濱河市累澡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌般贼,老刑警劉巖愧哟,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奥吩,死亡現(xiàn)場離奇詭異,居然都是意外死亡蕊梧,警方通過查閱死者的電腦和手機霞赫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肥矢,“玉大人端衰,你說我怎么就攤上這事「矢模” “怎么了旅东?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長楼誓。 經(jīng)常有香客問我玉锌,道長,這世上最難降的妖魔是什么疟羹? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任主守,我火速辦了婚禮,結果婚禮上榄融,老公的妹妹穿的比我還像新娘参淫。我一直安慰自己,他們只是感情好愧杯,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布涎才。 她就那樣靜靜地躺著,像睡著了一般力九。 火紅的嫁衣襯著肌膚如雪耍铜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天跌前,我揣著相機與錄音棕兼,去河邊找鬼。 笑死抵乓,一個胖子當著我的面吹牛伴挚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播灾炭,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼茎芋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蜈出?” 一聲冷哼從身側響起田弥,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎铡原,沒想到半個月后皱蹦,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體煤杀,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年沪哺,在試婚紗的時候發(fā)現(xiàn)自己被綠了沈自。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡辜妓,死狀恐怖枯途,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情籍滴,我是刑警寧澤酪夷,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站孽惰,受9級特大地震影響晚岭,放射性物質發(fā)生泄漏。R本人自食惡果不足惜勋功,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一坦报、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狂鞋,春花似錦片择、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至信不,卻和暖如春嘲叔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抽活。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工借跪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人酌壕。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像歇由,于是被迫代替她去往敵國和親卵牍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354