是否可以使用为自动合成属性创建的实例变量?

时间:2012-11-21 11:31:28

标签: objective-c properties

目前我可以写一个这样的课程:

@interface Foo
@property(assign) float bar;
@end

@implementation Foo

- (void) someMethod
{
    _bar = 4;
}

@end

我可以省略@synthesize样板列表,如果我可以习惯使用下划线表示法,我会得到一个很好的可读规则,即名为_foo的所有内容都是实例变量。可以使用像这样的自动生成的实例变量吗?我的意思是,即使对班级作者来说,也许它们应该是隐形的?

2 个答案:

答案 0 :(得分:3)

是的,使用这些变量绝对可以。

完全删除@synthesize要求是一种方便:现在隐式插入@synthesize xyz - 这是唯一的区别。编译器的设计者认为,由于他们可以明确地识别您想要合成访问器的情况与您提供自定义实现时的情况,因此停止要求您提供明确的@synthesize是合理的。

答案 1 :(得分:2)

  

使用为自动合成属性创建的实例变量是否可以?

绝对

  

我可以省去@synthesize样板列表,如果我可以习惯使用下划线表示法,我会得到一个很好的可读规则,即所有名为_foo的实例都是一个实例变量。

当然,您还可以使用@synthesize foo = f00;指定名称。

  

使用像这样的自动生成的实例变量是否可以?我的意思是,即使对班级作者来说,它们是否应该是隐形的?

不。它们是内部可访问的必要。如果您使用ARC,这种情况就不那么频繁了,但是直接访问它的常见情况是初始化和销毁​​(不应使用访问器方法的情况)。