筆記記錄:來源于apple的文檔,具體參考:apple文檔
類型編碼
為了幫助運行時系統(tǒng)拟杉,編譯器對 回報 和參數(shù)類型用于字符串中的每個方法央拖,并將該字符串與方法選擇器相關(guān)聯(lián)拥坛。它使用的編碼方案在其他上下文中也很有用,因此可以通過@encode()
編譯器指令公開使用。當(dāng)給出類型說明時攒射,@encode()
返回編碼該類型的字符串醋旦。該類型可以是基本類型,例如int
会放,指針饲齐,帶標(biāo)簽的結(jié)構(gòu)或聯(lián)合或類名,實際上可以用作Csizeof()
運算符的參數(shù)的任何類型咧最。
char *buf1 = @encode(int **);
char *buf2 = @encode(struct key);
char *buf3 = @encode(Rectangle);
下表列出了類型代碼捂人。請注意,它們中的許多與您出于歸檔或分發(fā)目的而對對象進(jìn)行編碼時所使用的代碼重疊矢沿。但是滥搭,這里列出了一些代碼,這些代碼在編寫編碼器時無法使用捣鲸,并且某些代碼可能不是由以下人員生成的论熙,它們可能會在編寫編碼器時使用@encode()
。(有關(guān)NSCoder用于歸檔或分發(fā)的編碼對象的更多信息摄狱,請參見Foundation Framework參考中的類規(guī)范脓诡。)
Objective-C類型編碼
要點: Objective-C不支持該long double類型。@encode(long double)返回d媒役,與的編碼相同double祝谚。
數(shù)組的類型代碼括在方括號內(nèi);數(shù)組中元素的數(shù)量是在方括號之后酣衷,數(shù)組類型之前指定的交惯。例如,指向floats的12個指針的數(shù)組將被編碼為:
[12 ^ f]
在括號內(nèi)指定結(jié)構(gòu)穿仪,在括號內(nèi)指定并集席爽。首先列出結(jié)構(gòu)標(biāo)簽,然后是等號啊片,并按順序列出結(jié)構(gòu)字段的代碼只锻。例如結(jié)構(gòu):
typedef struct example {
id anObject;
char *aString;
int anInt;
} Example;
會這樣編碼:
{example = @ * i}
無論將定義的類型名稱(Example)還是結(jié)構(gòu)標(biāo)記(example)傳遞給,編碼結(jié)果都相同@encode()紫谷。結(jié)構(gòu)指針的編碼包含有關(guān)結(jié)構(gòu)字段的相同數(shù)量的信息:
^ {example = @ * i}
但是齐饮,另一種間接訪問級別刪除了內(nèi)部類型規(guī)范:
^^ {example}
對象被當(dāng)作結(jié)構(gòu)對待。例如笤昨,將NSObject類名傳遞給會@encode()產(chǎn)生以下編碼:
{NSObject =#}
本NSObject
類僅聲明了一個實例變量isa
的類型類祖驱。
請注意,盡管該@encode()
指令未返回它們瞒窒,但是當(dāng)運行時系統(tǒng)用于在協(xié)議中聲明方法時捺僻,它們將表6-2中列出的其他編碼用于類型限定符。
Objective-C方法編碼
大千世界,求同存異匕坯;相遇是緣束昵,相識是份,相知便是“猿糞”(緣分)
From MZou