在我的节目中,我创造了一个属性:
@property (nonatomic, retain) IBOutlet UIImageView *block;
@synthesize block;
-
现在,如果我这样做:
NSLog(@"BLOCK = %i", block.center.y);
它只是说: BLOCK = 0
但我的块ImageView对象永远不会在y = 0!
请帮忙!
答案 0 :(得分:2)
CGPoint.y
为CGFloat
,因此您需要使用%f
将其打印出来。
答案 1 :(得分:1)
属性和实例变量是不同的东西;属性表示由类公开的状态,而实例变量是可以为类实现状态的一种方式。
当您编写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
是属性调用的getter方法:
@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