4

Objective-C ランタイムは、class_addIvar C 関数を提供します。

BOOL class_addIvar(Class cls, const char *name, size_t size, 
                   uint8_t alignment, const char *types)

私は何を置きsizeますalignmentか?

type のインスタンス変数を追加していますが、スコープ内にオブジェクトUITextPosition *がありません。UITextPositionのサブクラスはsizeどこsizeof(self)ですか? つまり、オブジェクトがオブジェクトと同じサイズであると仮定できますか?selfUITextFieldUITextPositionUITextField

どうすれば入手できalignmentますか?

4

2 に答える 2

7

このようなドキュメントはあまり有益ではありません。これは、一般的に使用すべきではないことを反映しています。ただし、アライメントを求めることができます。

char *texPosEncoding = @encode(UITextPosition);
NSUInteger textPosSize, textPosAlign;
NSGetSizeAndAlignment(textPosEncoding, &textPosSize, &textPosAlign);
class_addIvar(yourClass, "yourIvarName", textPosSize, textPosAlign, textPosEncoding);
于 2012-01-24T06:34:14.253 に答える
4

したがって、まず第一に、大きな問題は「なぜ」です。これは、実行時に自分で生成しているクラスでのみ機能し、既存のクラスにivarを追加することはできません。

それが邪魔にならないように、あなたの場合、ポインタ型であるivarを追加しています。つまり、それらはすべて同じサイズです。重要なオブジェクトのサイズではなく、ポインタのサイズです。

次にリンクしたドキュメントから、サイズsizeof(UITextPosition*)と配置を次のように設定します。log2(sizeof(UITextPosition*))

于 2011-10-29T23:33:49.557 に答える