我在 Obj-c 和 Cocoa 方面有几年的经验,但我现在才刚刚回到它以及 Obj-C 2.0 等的进步。
我试图了解现代运行时和声明属性等。让我有点困惑的一件事是现代运行时中隐式创建 iVar 的能力。当然,这意味着在您的代码中,您应该始终使用 self.property 来访问该值。
但是,在 init* 和 dealloc(假设您没有使用 GC)方法中,我们应该直接使用 iVar(在当前运行时)。
所以问题是:
我们应该在 init* 中使用属性访问器并在 Modern Runtime 中使用 dealloc 吗?
如果是这样,为什么会有所不同?仅仅是因为编译器看不到 iVar 吗?
如果我需要覆盖访问器,我是否仍然可以访问将在运行时定义的 iVar,还是必须定义运行时将使用的实际 iVar?
同样,如果我可以访问合成的 iVar,为什么我不能继续为 init* 和 dealloc 方法执行此操作?
我多次阅读文档,但它们似乎对所有这些都有些模糊,我想确保我理解它,以便决定如何继续编码。
希望我的问题很清楚。
测试快速总结:
如果您不在 legacy 中声明 ivar,编译器将完全不高兴
如果您
#ifndef __OBJC2__
在遗留编译器中使用 around ivar 很高兴,您可以直接使用 ivar 和作为属性在现代运行时,您可以保留 ivar 未定义并作为属性访问
在现代运行时,尝试直接访问 ivar 而不声明会在编译期间出错
@private
当然,ivar 的声明允许直接访问 ivar,无论是传统的还是现代的
现在真的没有给出一个干净的前进方式吗?