首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Objective-C运行时: class_addIvar的大小和对齐应该放在什么位置?

Objective-C运行时: class_addIvar的大小和对齐应该放在什么位置?
EN

Stack Overflow用户
提问于 2011-10-30 07:30:11
回答 2查看 2K关注 0票数 4

The Objective-C Runtime provides the class_addIvar C function

代码语言:javascript
复制
BOOL class_addIvar(Class cls, const char *name, size_t size, 
                   uint8_t alignment, const char *types)

我应该为sizealignment设置什么

我添加了一个UITextPosition *类型的实例变量,但作用域中没有UITextPosition对象。对于size,我是否可以只执行sizeof(self),其中selfUITextField的子类?也就是说,我能假设一个UITextPosition对象和一个UITextField对象大小相同吗?

如何获取alignment

EN

回答 2

Stack Overflow用户

发布于 2012-01-24 14:34:14

关于这个东西的文档信息不是很丰富,这确实反映了通常你不应该使用它。但是,您可以要求对齐:

代码语言:javascript
复制
char *texPosEncoding = @encode(UITextPosition);
NSUInteger textPosSize, textPosAlign;
NSGetSizeAndAlignment(textPosEncoding, &textPosSize, &textPosAlign);
class_addIvar(yourClass, "yourIvarName", textPosSize, textPosAlign, textPosEncoding);
票数 7
EN

Stack Overflow用户

发布于 2011-10-30 07:33:50

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

在你的例子中,你添加了一个ivar,这是一个指针类型,这意味着它们都是相同的大小。重要的是指针的大小,而不是对象的大小。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7942345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档