Objective C 型別編碼

2021-07-24 23:11:14 字數 3069 閱讀 5787

在開發的時候我們會遇到後跟objctype:(const char *)types的方法。

如: + (nsvalue *)valuewithbytes:(const void *)value objctype:(const char *)type;

+ (nullable nsmethodsignature *)signaturewithobjctypes:(const char *)types;

objctypes的引數需要用objective-c的編譯器指令@encode()來建立,@encode()返回的是objective-c型別編碼(objective-c type encodings)。

編碼意義c

a char

ian int

sa short

la longl is treated as a 32-bit quantity on 64-bit programs.

qa long long

can unsigned char

ian unsigned int

san unsigned short

lan unsigned long

qan unsigned long long

fa float

da double

ba c++ bool or a c99 _bool

va 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

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)

編譯器內部有些關鍵字無法用 @encode() 返回,這些關鍵字也有自己的編碼

編碼意義

rconstnin

ninout

oout

obycopy

rbyref

voneway

- (void)viewdidload ;

nslog(@"struct person \t\t %s", @encode(struct person));

nslog(@"cgpoint \t\t %s", @encode(cgpoint));

nslog(@"cgrect \t\t %s", @encode(cgrect));

printf("\n");

nslog(@"oc型別:");

nslog(@"bool \t\t %s", @encode(bool));

nslog(@"sel \t\t %s", @encode(sel));

nslog(@"id \t\t %s", @encode(id));

nslog(@"class \t\t %s", @encode(class));

nslog(@"class * \t\t %s", @encode(class *));

nslog(@"nsobject class \t\t %s", @encode(typeof([nsobject class])));

nslog(@"[nsobject class] * \t\t %s", @encode(typeof([nsobject class]) *));

nslog(@"nsobject \t\t %s", @encode(nsobject));

nslog(@"nsobject * \t\t %s", @encode(nsobject *));

nslog(@"nsarray \t\t %s", @encode(nsarray));

nslog(@"nsarray * \t\t %s", @encode(nsarray *));

nslog(@"nsmutablearray \t\t %s", @encode(nsmutablearray));

nslog(@"nsmutablearray * \t\t %s", @encode(nsmutablearray *));

nslog(@"uiview \t\t %s", @encode(uiview));

nslog(@"uiview * \t\t %s", @encode(uiview *));

nslog(@"uiimage \t\t %s", @encode(uiimage));

nslog(@"uiimage * \t\t %s", @encode(uiimage *));

}

列印結果:

總結:

Objective C開發編碼規範

ps 看樣子 這裡是很久前在其他地方搞的.點語法的使用 不建議使用點語法呼叫方法,只用來訪問屬性。這樣做是為了防止 可讀性問題。例 正確 使用點語法訪問屬性 nsstring oldname object.name object.name cai 複製 錯誤 不要使用點語法呼叫方法 nsarray ...

Objective C之KVC 鍵值編碼

ios中key value coding kvc 俗稱鍵值編碼,是乙個非正式的協議,它提供一種機制來間接訪問物件的屬性。直接訪問物件是通過呼叫訪問器的方法實現,而kvc不需要呼叫訪問器的設定和獲取方法,可以直接訪問物件的屬性。kvc的操作方法由nskeyvaluecoding協議提供,而nsobje...

Objective C 定義的型別

以下列出的是objective c內建的型別集合 型別定義 id物件的引用 指向其資料結構的指標 class類物件的引用 指向其資料結構的指標 sel選標 編譯器分配用來區分方法名的編碼 imp指向方法實現的指標,該實現返回id bool布林值,yes or no nil空的物件指標,id 0 ni...