目前我可以写一个这样的类:
@interface Foo
@property(assign) float bar;
@end
@implementation Foo
- (void) someMethod
{
_bar = 4;
}
@end
我可以省略@synthesize样板列表很方便,如果我能习惯下划线表示法,我会得到一个很好的可读规则,即所有命名_foo都是实例变量。像这样使用自动生成的实例变量可以吗?我的意思是,也许他们甚至对班级作者来说应该是不可见的?
目前我可以写一个这样的类:
@interface Foo
@property(assign) float bar;
@end
@implementation Foo
- (void) someMethod
{
_bar = 4;
}
@end
我可以省略@synthesize样板列表很方便,如果我能习惯下划线表示法,我会得到一个很好的可读规则,即所有命名_foo都是实例变量。像这样使用自动生成的实例变量可以吗?我的意思是,也许他们甚至对班级作者来说应该是不可见的?
是的,使用这些变量是绝对可以的。
完全放弃@synthesize要求是一种方便:@synthesize xyz现在隐式插入 - 这是唯一的区别。编译器的设计者推断,由于他们可以明确识别您想要合成访问器的情况与您提供自定义实现时的情况,因此停止要求您提供显式的@synthesize.
可以使用为自动合成属性创建的实例变量吗?
绝对地
我可以省略@synthesize 样板列表很方便,如果我能习惯下划线表示法,我会得到一个很好的可读规则,即所有名为 _foo 的东西都是一个实例变量。
当然,您也可以使用 指定名称@synthesize foo = f00;。
像这样使用自动生成的实例变量可以吗?我的意思是,他们不应该对班级作者不可见吗?
没有。它们必须是内部可访问的。如果您使用 ARC,那么这种情况不太常见,但您直接访问它们的常见情况是初始化和销毁(不应该使用访问器方法的情况)。