属性/属性:getter不起作用! Objective-C iPhone

时间:2010-11-06 08:06:51

标签: iphone objective-c properties position positioning

在我的节目中,我创造了一个属性:

@property (nonatomic, retain) IBOutlet UIImageView *block;
@synthesize block;

-

现在,如果我这样做:

NSLog(@"BLOCK = %i", block.center.y);

它只是说: BLOCK = 0

但我的块ImageView对象永远不会在y = 0!

请帮忙!

2 个答案:

答案 0 :(得分:2)

CGPoint.yCGFloat,因此您需要使用%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消息。 @synthesizeenabled属性定义为由实例变量isEnabled_支持。

因此,您可以通过以下方式访问该媒体资源:

BOOL shouldDrawView;

shouldDrawView = someView.enabled;  // sends -isEnabled to someView
shouldDrawView = [someView isEnabled];  // also sends -isEnabled to someView