【发布时间】:2011-09-14 15:22:24
【问题描述】:
我从不使用 ivars。我只使用属性——有时使用原始类型分配属性,有时使用"private" class extension。我已经看到了在切换到 ARC 时不使用 ivars 的优势——我有一些借用的代码,其中包含很多我仍然不能“ARC”的 ivars,因为我不知道需要保留什么。所以我知道不使用 ivars 的一些优点,但是使用 ivars 代替属性有什么优点呢?
注意:我完全依赖于(由编译器?)自动添加的 ivars 来进行属性声明。
不要标记为关闭:我已经查看了其他一些问题,例如 this 和 this ,但没有一个是正确的。 标题看起来不错,但就像关于 SO 的许多问题一样,这些问题是一堆奇怪的疑问和其他东西。
【问题讨论】:
-
参见stackoverflow.com/questions/6112283/question-about-synthesize/…“访问器综合的行为取决于运行时...”使用@property 并手动声明ivars 仅对支持遗留运行时有用(afaik) .
-
哎呀,很抱歉读了这么久。我只想向您指出来自Property Implementation Directives 的引用,它指出合成发生在编译时。我无法找出 ivars 的案例,而不是现代运行时中的属性。这是一个有趣的问题,我会进一步研究它。
-
想一想:所有作用域编译器指令(
@private等)的效果都可以通过属性来实现吗?我知道readonly和readwrite,但是这些(可能在类扩展的帮助下)能否涵盖所有必需的范围? -
@StuDev,
@private很容易模仿,但@protected已经更难了(如何强制子类使用类扩展,而其他类忽略它?)。所以我认为你正在开始一个非常有趣的答案。不幸的是,这个问题没有被 63,000 只大猩猩在没有任何谷歌搜索或研究的情况下回答这个问题,所以它在我们身上。 -
@Yar,经过一番研究,我想我会发布这个作为答案......似乎没有办法声明一个被视为受保护的属性。跨度>
标签: objective-c ios automatic-properties