iOS 类型编码 Type Encodings 详解
来源:互联网 发布:化妆前后对比照 知乎 编辑:程序博客网 时间:2024/05/16 07:08
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html#//apple_ref/doc/uid/TP40008048-CH100-SW1
Type Encodings
To assist the runtime system, the compiler encodes the return and argument types for each method in a character string and associates the string with the method selector. The coding scheme it uses is also useful in other contexts and so is made publicly available with the @encode()
compiler directive. When given a type specification, @encode()
returns a string encoding that type. The type can be a basic type such as an int
, a pointer, a tagged structure or union, or a class name—any type, in fact, that can be used as an argument to the C sizeof()
operator.
char *buf1 = @encode(int **);
char *buf2 = @encode(struct key);
char *buf3 = @encode(Rectangle);
The table below lists the type codes. Note that many of them overlap with the codes you use when encoding an object for purposes of archiving or distribution. However, there are codes listed here that you can’t use when writing a coder, and there are codes that you may want to use when writing a coder that aren’t generated by@encode()
. (See the NSCoder
class specification in the Foundation Framework reference for more information on encoding objects for archiving or distribution.)
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
b
num
A bit field of num bits
^
type
A pointer to type
?
An unknown type (among other things, this code is used for function pointers)
Important: Objective-C does not support the long double
type. @encode(long double)
returns d
, which is the same encoding as for double
.
The type code for an array is enclosed within square brackets; the number of elements in the array is specified immediately after the open bracket, before the array type. For example, an array of 12 pointers to float
s would be encoded as:
[12^f]
Structures are specified within braces, and unions within parentheses. The structure tag is listed first, followed by an equal sign and the codes for the fields of the structure listed in sequence. For example, the structure
typedef struct example {
id anObject;
char *aString;
int anInt;
} Example;
would be encoded like this:
{example=@*i}
The same encoding results whether the defined type name (Example
) or the structure tag (example
) is passed to @encode()
. The encoding for a structure pointer carries the same amount of information about the structure’s fields:
^{example=@*i}
However, another level of indirection removes the internal type specification:
^^{example}
Objects are treated like structures. For example, passing the NSObject
class name to @encode()
yields this encoding:
{NSObject=#}
The NSObject
class declares just one instance variable, isa
, of type Class.
Note that although the @encode()
directive doesn’t return them, the runtime system uses the additional encodings listed in Table 6-2 for type qualifiers when they’re used to declare methods in a protocol.
Code
Meaning
r
const
n
in
N
inout
o
out
O
bycopy
R
byref
V
oneway
- iOS 类型编码 Type Encodings 详解
- iOS 类型编码(Type Encodings)
- iOS类型编码Type Encodings与属性类型Property Type
- 类型编码(Type Encodings)
- iOS Type Encodings
- 关于iOS中的type encodings 和method encodings
- Type Encodings
- iOS方法返回值和参数对应的Type Encodings
- Objective-C type encodings
- Type Encodings property_getAttributes
- Type Encodings-runtime
- Java Type类型详解
- NGUI Sprite Type类型详解
- OC 类型编码详解
- iOS base64 编码详解
- default mappings from payload type numbers to encodings
- Objective-C 运行时编程指南 之 Type Encodings
- Elasticsearch搜索类型(query type)详解
- BBC news reading 3--前缀 patr
- 敏捷开发之上线检查表
- socket编程之epoll多路复用
- 数据结构实验之链表五:单链表的拆分
- MongoDB 索引
- iOS 类型编码 Type Encodings 详解
- error:WINDOWS.H already included错误解释
- Handoff 指南
- 2039 三角形
- 如何将pdf文档内容转成图片
- 【NOIP2012普及组】摆花
- Mac下的WIFI破解
- 移动端内容显示在一页时,虚拟键盘输入与position:fixed的冲突解决
- Java反射机制