2

所以在指南中它说:

对于仅在 iOS 上运行的代码,最好使用自动合成的实例变量。

合成实例变量时,使用@synthesize var = var_; 因为这样可以防止意外调用 var = blah; 当 self.var = blah; 旨在。

 // Header file
@interface Foo : NSObject
// A guy walks into a bar.
@property(nonatomic, copy) NSString *bar;
@end

// Implementation file
@interface Foo ()
@property(nonatomic, retain) NSArray *baz;
@end

@implementation Foo
@synthesize bar = bar_;
@synthesize baz = baz_;
@end

问题是,这是否仅适用于公共变量或私有变量?文档上并不是很清楚,但想对为什么“如果”这仅适用于公共或私人有一些想法或观点?我认为这对所有公共/私人来说都是有意义的,这样你就不会弄乱 ivars 并使用该属性

4

2 回答 2

1

我认为所讨论的变量是公共的还是私有的并不特别重要。当您直接访问变量而不是使用生成的访问器方法时,以不同名称进行综合的做法使其变得明确。

也许您要问的还有一个不同的问题:我通常应该通过访问器还是直接访问私有 ivars?我认为大多数熟练的 iOS 开发人员倾向于使用访问器,除非有特殊原因不使用(性能、避免 KVO 等副作用等)。这样做更具前瞻性,并允许底层实现具有灵活性。以一种非常小的方式,您正在对接口而不是实现进行编码。

还可能值得指出的是,Clang 的默认行为将在未来发生变化,因此支持属性的 ivars 被合成为_foo default命名。显然,被考虑的权力认为强调 ivars 是最佳实践。

于 2012-05-24T22:56:13.703 回答
0

我很确定这很大程度上取决于个人喜好,所以这是我的,因为它们的价值:

  • 我喜欢区分公共属性和“私有”实例变量。
  • 属性总是通过它们的访问器访问,除了初始化(以及在手动创建的访问器方法中,出于显而易见的原因)。因此,支持 ivar 中的下划线很有用,在我日常使用这些属性时并不是真正的问题。
  • 实例变量用于保存方法内部使用的状态,但不(直接)由其他类使用。
  • 我非常喜欢在 .m 文件中声明我的实例变量。不错,干净且简单(无需在 .h 和 .m 之间来回切换来声明 ivars)。
  • 我发现这种区别有助于我理清思路,并确定一个属性是否是外部代理应该直接获取和/或设置的东西(.h 中的一个属性),或者它是否真的只是帮助我的方法实现工作( .m 中的 ivar)。

我同意 Paul.s 的观点。这种一致性是你的朋友,但对我来说,区别也是朋友。

于 2012-05-24T22:24:12.257 回答