感谢Yuji回答了我的另一个问题,并向我指了一篇关于Objective-C中动态ivars的文章.
然而,正如我在解释的其他问题的sizeof运营商现在的行为不一致.简而言之,sizeof不会考虑来自类.m文件外部的动态ivars,但会.m在@synthesize创建动态ivars 的声明之后将其考虑在文件中.
所以我的问题是,这是否打破了Objective-C是C的严格超集的想法?
不是.所有有效的C代码都是有效的Objective-C代码,其含义与C中的含义相同,因此Objective-C仍然是一个严格的超集.请记住,允许超集具有子集中未找到的功能 - 这就是Objective-C可以具有所有其他功能和语法的全部原因,同时保持100%C兼容.
这会影响到实现细节,Objective-C类本质上是C结构类型,带有一组作用于它们的函数.请注意,类似的功能objC_setAssociatedObject() 可以为CoreFoundation样式的纯C结构实现,而根本不改变C语言本身 - 它会产生类似的副作用,使得sizeof()不能完全"准确"地理解结构所包含的所有数据. .
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |