最近,似乎在Objective-C中显式声明的实例变量被认为是要避免的事情,首选是使用“私有”属性,即在.m文件中的类扩展中声明的属性。
最后一个例子是WWDC '12关于Objective-C进展的演示文稿。
我无法找到的是这种偏好的理由,我已经搜索了很多。它显然为脆弱的基类问题提供了一种解决方案,但是已经用Objective-C 2解决了这个问题。
是否有一些我错过的重要文件,或者是否有一个善良的灵魂可以提供的简单解释?
答案 0 :(得分:2)
你是说这个?
@interface Foo : NSObject {
float bar;
id baz;
}
如果这些实例变量不是公共接口的一部分,那么最好将它们移动到实现文件中,或者作为类扩展中的声明属性,或者移动到@implementation
块:
@interface Foo ()
@property(assign) float bar;
@property(strong) id baz;
@end
...或:
@implementation Foo {
float bar;
id baz;
}
这样,标头中声明的公共接口保持简单,实现中的更改不会强制重新编译导入标头的所有源文件。
答案 1 :(得分:0)
我在这里找到了解释:iOS: must every iVar really be property?,尤其是@ bbum的回答。