c/c++语言开发共享Objective-C运行时:为class_addIvar添加大小和对齐的内容?

Objective-C Runtime提供了class_addIvar C函数 :

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

我对sizealignment什么alignment

我正在添加一个类型为UITextPosition *的实例变量,但是没有UITextPosition对象在范围内。 对于size ,我可以只做sizeof(self) ,其中selfUITextField的子类吗? 即,我可以假设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

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐