属性/属性:getter不';不行!Objective-C iPhone

属性/属性:getter不';不行!Objective-C iPhone,iphone,objective-c,properties,position,positioning,Iphone,Objective C,Properties,Position,Positioning,在我的程序中,我创建了一个属性: @property (nonatomic, retain) IBOutlet UIImageView *block; @synthesize block; @interface View : NSObject { @private BOOL isEnabled_; } @property (getter=isEnabled) BOOL enabled; @end @implementation View @synthesize enabled = i

在我的程序中,我创建了一个属性:

@property (nonatomic, retain) IBOutlet UIImageView *block;
@synthesize block;
@interface View : NSObject {
@private
    BOOL isEnabled_;
}
@property (getter=isEnabled) BOOL enabled;
@end

@implementation View
@synthesize enabled = isEnabled_;
@end
-

现在如果我这样做:

NSLog(@"BLOCK = %i", block.center.y);
它只是说: 块=0

但是我的block UIImageView对象永远不会在y=0上


请帮忙

CGPoint.y
CGFloat
,因此需要使用
%f
将其打印出来。

CGPoint.y
CGFloat
,因此需要使用
%f
将其打印出来。

属性和实例变量是不同的东西;属性表示类公开的状态,而实例变量是实现类状态的一种方法

编写
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\uu
是实例变量,
enabled
是属性,
-isEnabled
是属性调用的getter方法:

@property (nonatomic, retain) IBOutlet UIImageView *block;
@synthesize block;
@interface View : NSObject {
@private
    BOOL isEnabled_;
}
@property (getter=isEnabled) BOOL enabled;
@end

@implementation View
@synthesize enabled = isEnabled_;
@end
getter=isEnabled
属性告诉编译器在获取
enabled
属性时生成
-isEnabled
消息。
@synthesis
enabled
属性定义为由实例变量
isEnabled\uuuu
支持

因此,您可以通过以下方式访问该属性:

BOOL shouldDrawView;

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

属性和实例变量是不同的东西;属性表示类公开的状态,而实例变量是实现类状态的一种方法

编写
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\uu
是实例变量,
enabled
是属性,
-isEnabled
是属性调用的getter方法:

@property (nonatomic, retain) IBOutlet UIImageView *block;
@synthesize block;
@interface View : NSObject {
@private
    BOOL isEnabled_;
}
@property (getter=isEnabled) BOOL enabled;
@end

@implementation View
@synthesize enabled = isEnabled_;
@end
getter=isEnabled
属性告诉编译器在获取
enabled
属性时生成
-isEnabled
消息。
@synthesis
enabled
属性定义为由实例变量
isEnabled\uuuu
支持

因此,您可以通过以下方式访问该属性:

BOOL shouldDrawView;

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

无论如何,您都没有使用getter。要使用getter,必须使用self.block=foo;fluchtpunkt:你应该发布一个问题的答案,而不是简单地用评论来回答。你无论如何都没有使用getter。要使用getter,必须使用self.block=foo;fluchtpunkt:你应该发布一个问题的答案,而不是简单地用评论来回答。