zoukankan      html  css  js  c++  java
  • Type Encodings

    https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html#//apple_ref/doc/uid/TP40008048-CH100-SW1

    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.)

    Table 6-1  Objective-C type encodings

    Code

    Meaning

    c

    char

    i

    An int

    s

    short

    l

    long

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

    q

    long long

    C

    An unsigned char

    I

    An unsigned int

    S

    An unsigned short

    L

    An unsigned long

    Q

    An unsigned long long

    f

    float

    d

    double

    B

    A C++ bool or a C99 _Bool

    v

    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)

    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 floats 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.

  • 相关阅读:
    (Java) LeetCode 275. H-Index II —— H指数 II
    (Java) LeetCode 82. Remove Duplicates from Sorted List II —— 删除排序链表中的重复元素 II
    前端知识体系目录
    PhoneGap/cordvoa如何添加Media插件
    使用Google Closure Compiler高级压缩Javascript代码注意的几个地方
    javascript中的函数式声明与变量式声明
    call,apply,bind的用法
    canvas学习笔记
    Cookie/Session机制详解
    架构师速成6.8-设计开发思路-领域驱动 分类: 架构师速成 2015-07-30 18:28 15人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/feng9exe/p/7131482.html
Copyright © 2011-2022 走看看