Objective-C Runtime提供了class_addIvar C函数 :
BOOL class_addIvar(Class cls, const char *name, size_t size, uint8_t alignment, const char *types)
我对size
和alignment
什么alignment
?
我正在添加一个类型为UITextPosition *
的实例变量,但是没有UITextPosition
对象在范围内。 对于size
,我可以只做sizeof(self)
,其中self
是UITextField
的子类吗? 即,我可以假设UITextPosition
对象与UITextField
对象的大小相同吗?
如何alignment
?
关于这些东西的文档信息量不大,这反映出通常你不应该使用它。 但是,您可以要求对齐:
char *texPosEncoding = @encode(UITextPosition); NSUInteger textPosSize, textPosAlign; NSGetSizeAndAlignment(textPosEncoding, &textPosSize, &textPosAlign); class_addIvar(yourClass, "yourIvarName", textPosSize, textPosAlign, textPosEncoding);
所以,首先,最大的问题是’为什么’。 这只适用于您自己在运行时生成的类,您无法将ivars添加到现有类中。
有了这个,在你的情况下,你添加一个指针类型的ivar,这意味着它们都是相同的大小。 它的指针大小,而不是重要的对象的大小。
从您链接的文档中,您希望sizeof(UITextPosition*)
为sizeof(UITextPosition*)
并且对齐为log2(sizeof(UITextPosition*))
需要了解更多c/c++开发分享Objective-C运行时:为class_addIvar添加大小和对齐的内容?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享Objective-C运行时:为class_addIvar添加大小和对齐的内容?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/979547.html