感谢 Yuji 回答我的 another question 并将我指向 this article about dynamic ivars in Objective-C

但是,正如我在 other question 中所解释的,sizeof 运算符现在的行为不一致。简而言之,sizeof 不会考虑类 .m 文件外部的动态 ivars,但会在创建动态 ivars 的 .m 声明之后考虑 @synthesize 文件内部的动态 ivars。

所以我的问题是这是否打破了 Objective-C 是 C 的严格超集的想法?

最佳答案

不。所有有效的 C 代码仍然是有效的 Objective-C 代码,其含义与在 C 中的含义相同,因此 Objective-C 仍然是一个严格的超集。请记住,允许超集具有子集中没有的特性——这就是 Objective-C 可以拥有所有附加功能和语法同时保持 100% C 兼容的全部原因。

这确实影响的是实现细节,即 Objective-C 类本质上是 C 结构类型,具有一组作用于它们的函数。请注意,可以为 CoreFoundation 风格的纯 C 结构体实现与 objC_setAssociatedObject() 类似的功能,而根本不更改 C 语言本身——并且它会产生类似的副作用,即使 sizeof() 不能给出所有数据的完全“准确”的想法结构包含。

关于objective-c - "dynamic ivars"是否打破了 Objective-c 的 "strict superset of C"范式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4089316/

10-11 23:02
查看更多