【Objective-C】タイプコードおよび対応バイトサイズ


周知のように,メソッドの違いはメソッド名に限らず,さらに重要なのはパラメータおよび戻り値タイプ,パラメータ個数,OCではこれらのものをtypeEncoding後にメソッドの記述typesを生成し,実行時メソッド呼び出しと伝達で使用する.
typeEncodingとは、戻り値タイプ、ターゲットオブジェクト、SEL、パラメータタイプ、encodeの後に生成される短い文字の集合であり、各タイプに対応する文字または文字の集合を以下に示す.

タイプコードtypeEncode

{
    BOOL = B;
    CGFloat = d;
    CGPoint = "{CGPoint=dd}";
    CGRect = "{CGRect={CGPoint=dd}{CGSize=dd}}";
    CGSize = "{CGSize=dd}";
    CGVector = "{CGVector=dd}";
    Class = "#";
    NSInteger = q;
    NSRange = "{_NSRange=QQ}";
    SEL = ":";
    block = "@?";
    bool = B;
    char = c;
    double = d;
    float = f;
    id = "@";
    "id*" = "^@";
    int = i;
    long = q;
    "long long" = q;
    short = s;
    "size_t" = Q;
    "unsigned int" = I;
    "unsigned long" = Q;
    "unsigned long long" = Q;
    "unsigned short" = S;
    void = v;
    "void *" = "^v";
    "void*" = "^v";
}

対応バイトサイズ(x 86_64アーキテクチャ):

{
    BOOL = 1;
    CGFloat = 8;
    CGPoint = 16;
    CGRect = 32;
    CGSize = 16;
    CGVector = 16;
    Class = 8;
    NSInteger = 8;
    NSRange = 16;
    SEL = 8;
    bool = 1;
    char = 1;
    double = 8;
    float = 4;
    id = 8;
    "id *" = 8;
    int = 4;
    long = 8;
    "long long" = 8;
    short = 2;
    "size_t" = 8;
    "unsigned int" = 4;
    "unsigned long" = 8;
    "unsigned long long" = 8;
    "unsigned short" = 2;
    void = 1;
    "void *" = 8;
    "void*" = 8;
}