存储在对象中的自动合成属性的顺序是什么?

时间:2014-11-13 16:31:34

标签: ios objective-c

Clang / LLVM是否优化了自动合成属性的内存使用以避免对齐填充?据我所知,Objective-C对象基本上是内存中的结构,所以像

这样的对象
@interface MyObj {
  BOOL b;
  id obj;
}

将在bobj之间填充,以便在指针大小的边界上对齐obj,而像

这样的对象
@interface MyObj2 {
  id obj;
  BOOL b;
}

不需要在objb之间填充,因为BOOL自然是字节对齐的。

对于自动合成属性,Xcode如何在内存中布置支持ivars?如果我手动命令ivars来改善填充,我的对象会使用更少的内存吗?

1 个答案:

答案 0 :(得分:2)

虽然我不知道,但我很确定设计这个的工程师会说这是一个你不应该关心的实现细节。在所有可能影响您的表现的事情中,这不可能是一个。

如果你真的想知道,仔细阅读clang或objc运行时代码可以告诉你。