属性和实例变量是不同的东西;一个属性代表你的类暴露的状态,而一个实例变量是你可以为你的类实现状态的一种方式。
当你写block.center.y
你访问实例变量命名block
,不调用属性的getter。要调用属性getter,你必须始终使用无论是点或消息的语法,如:
CGFloat centerY;
centerY = self.block.center.y; // sends -block getter to self
centerY = [self block].center.y; // sends -block getter to self
下面是一个例子,所有这些不同:isEnabled_
是实例变量,enabled
是财产,并且-isEnabled
是吸方法由属性调用:
@interface View : NSObject {
@private
BOOL isEnabled_;
}
@property (getter=isEnabled) BOOL enabled;
@end
@implementation View
@synthesize enabled = isEnabled_;
@end
的getter=isEnabled
属性告诉编译器生成-isEnabled
消息获取enabled
属性时。 @synthesize
将enabled
属性定义为由实例变量isEnabled_
支持。
可以因此访问属性是这样的:
BOOL shouldDrawView;
shouldDrawView = someView.enabled; // sends -isEnabled to someView
shouldDrawView = [someView isEnabled]; // also sends -isEnabled to someView
不使用吸气反正
。要使用getter,你必须使用self.block = foo; – 2010-11-06 09:36:08
fluchtpunkt:您应该回答问题,而不是简单回复评论。 – 2010-11-06 10:16:08