"动态ivars"打破了Objective-c的"C的严格超集"范式吗?

jha*_*ott 3 objective-c

感谢Yuji回答我的另一个问题,并向我指了一篇关于Objective-C中动态ivars的文章.

然而,正如我在解释的其他问题sizeof运营商现在的行为不一致.简而言之,sizeof不会考虑来自类.m文件外部的动态ivars,但会.m@synthesize创建动态ivars 的声明之后将其考虑在文件中.

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

Chu*_*uck 7

不是.所有有效的C代码都是有效的Objective-C代码,其含义与C中的含义相同,因此Objective-C仍然是一个严格的超集.请记住,允许超集具有子集中未找到的功能 - 这就是Objective-C可以具有所有其他功能和语法的全部原因,同时保持100%C兼容.

这会影响到实现细节,Objective-C类本质上是C结构类型,带有一组作用于它们的函数.请注意,类似的功能objC_setAssociatedObject() 可以为CoreFoundation样式的纯C结构实现,而根本不改变C语言本身 - 它会产生类似的副作用,使得sizeof()不能完全"准确"地理解结构所包含的所有数据. .