【问题标题】:What are the exact rules for structure alignment on iPhone OS?iPhone OS 上结构对齐的确切规则是什么?
【发布时间】:2010-09-18 11:46:23
【问题描述】:

我正在使用 Objective-C NSMethodSignature / @encode 工具进行一些跨语言数据类型转换,这意味着我需要能够以编程方式将值复制到以 @encode() 格式描述的结构中。例如,我可能有 4 个浮点数,需要将它们插入到 CGRect 中,这是一个包含 2 个结构的结构,每个结构包含 2 个浮点数。在@encode 术语中,类型是这样的:

{CGRect={CGPoint=ff}{CGSize=ff}}

为此,我需要能够猜测结构布局,只知道原始结构成员的数据类型——在本例中为 4 个浮点数。

从历史上看,ARM 结构对齐有两种不同的约定。一种是将结构的所有成员对齐到满足最大成员的边界大小。另一种是将所有成员对齐到适合每个成员数据类型的边界大小。

在 ARM 和 x86 / x86_64 上的 OS X / iPhone OS 中使用哪个?

【问题讨论】:

  • 我误解了你想要做的事情,仔细查看后我仍然没有很好的掌握。你能解释更多关于你如何尝试使用这些信息的信息吗?您是否尝试用另一种语言动态创建结构?您是否正在尝试将数据从一个移动到另一个?

标签: iphone objective-c


【解决方案1】:

如果您只是想对 CGRect 进行编码,您可能应该为 NSCoder -encodeCGRect:forKey: 使用 UIGeometryKeyedCoding 类别添加。

如果您想在系统之间切换,您可以考虑使用 NSRectFromCGRect() 将 CGRect 转换为 NSRect,然后使用 -encodeValueOfObjCType:at: 对 NSRect 进行编码。

如果您想对其他 C 结构进行编码,Apple 在标有“编码和解码 C 数据类型”的文档中制定了非常明确的政策。正如它在“结构和位字段”下所述,“归档结构或位字段集合的最佳技术是独立归档字段并为每个字段选择适当类型的编码/解码方法。”

【讨论】:

  • 很有趣,谢谢你的回答。但我需要仅使用从 @encode() 字符串派生的信息来找到所有结构类型的通用答案——例如,不知道 NSRect 和 CGRect 之间的等价性,每个结构类型没有自定义代码等。
猜你喜欢
  • 1970-01-01
  • 2019-09-12
  • 1970-01-01
  • 2015-04-15
  • 1970-01-01
相关资源
最近更新 更多