4

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

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

我要做什么sizealignment

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

我怎么得到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

所以,首先,最大的问题是“为什么”。这仅适用于您自己在运行时生成的类,您不能将 ivars 添加到现有类中。

顺便说一句,在您的情况下,您将添加一个指针类型的 ivar,这意味着它们的大小都相同。它是指针的大小,而不是重要的对象的大小。

从您链接的文档中,您希望大小为sizeof(UITextPosition*)和对齐方式为log2(sizeof(UITextPosition*))

于 2011-10-29T23:33:49.557 回答