Objective-C运行时:为class_addIvar添加大小和对齐的内容?

ma1*_*w28 4 c objective-c sizeof size-t memory-alignment

Objective-C运行提供class_addIvar C函数:

BOOL class_addIvar(Class cls, const char *name, size_t size, 
                   uint8_t alignment, const char *types)
Run Code Online (Sandbox Code Playgroud)

我该怎么把为sizealignment

我正在添加一个类型的实例变量UITextPosition *,但没有UITextPosition对象在范围内.因为size,我可以做sizeof(self),哪个self是子类UITextField?即,我可以假设一个UITextPosition对象与对象的大小相同UITextField吗?

我怎么得到alignment

Sea*_*ell 7

关于这些东西的文档信息量不大,这反映出通常你不应该使用它.但是,您可以要求对齐:

char *texPosEncoding = @encode(UITextPosition);
NSUInteger textPosSize, textPosAlign;
NSGetSizeAndAlignment(textPosEncoding, &textPosSize, &textPosAlign);
class_addIvar(yourClass, "yourIvarName", textPosSize, textPosAlign, textPosEncoding);
Run Code Online (Sandbox Code Playgroud)