2010-11-06 92 views
0

在我PROGRAMM,我做了一个属性:属性/属性:getter不起作用! Objective-C的iPhone

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

-

,如果我现在做的事:

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

它只是说: BLOCK = 0

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

请帮忙!

+0

。要使用getter,你必须使用self.block = foo; – 2010-11-06 09:36:08

+0

fluchtpunkt:您应该回答问题,而不是简单回复评论。 – 2010-11-06 10:16:08

回答

2

CGPoint.yCGFloat,所以你需要用%f打印出来。

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是吸方法由属性调用:

@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 
不使用吸气反正