在開發的時候我們會遇到後跟objctype:(const char *)types的方法。編碼意義c如: + (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)。
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...