Sun*_*ise 2 properties objective-c ivar
我正在阅读"Effective Objective-C 2.0:52改进iOS和OS X程序的具体方法".在"第6项"中,作者说在公共ivar上使用指针是一个坏主意,因为编译后的代码将具有硬编码指针偏移量,并且当新的ivar将被添加到类中时,之前使用的指向某些ivars的指针现在可以指向其他变量.
@interface Foo
{
@public
NSString * string;
NSArray * arr;
}
@end
@implementation
...
@end
int main()
{
@autoreleasepool
{
Foo *f=[Foo new];
f->string; //Is it bad idea?
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,ivars和属性是不是动态的(在编译时不知道偏移量)?正如Cocoa With Love所说:
"所有ivars在现代运行时都是动态的:由于所有ivars遵循此过程,这意味着现代Objective-C运行时中的所有ivars都是动态的,因为它们的绝对偏移在编译时永远不会被知道."
如果这是真的,那么为什么在伊塔尔上使用指针不好呢?请提供尽可能多的低级细节.
如果这是真的,那么为什么在伊塔尔上使用指针不好呢?请提供尽可能多的低级细节.
因为它破坏了封装.
如果类Foo有一些应该在string更改时触发的自定义逻辑怎么办?或者它必须进行计算?或者Foo想要存储string独特的?或者其他什么想要观察所述房产的变化?或者Foo想稍后更改存储语义?或者有人想要子类化Foo并改变那里的行为?
| 归档时间: |
|
| 查看次数: |
428 次 |
| 最近记录: |