【问题标题】:Properties / Property: getter doesn't work! Objective-C iPhone属性/属性:getter 不起作用! Objective-C iPhone
【发布时间】:2010-11-06 08:06:51
【问题描述】:

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

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

-

现在如果我这样做:

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

它只是说: 块 = 0

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

请帮忙!

【问题讨论】:

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

标签: iphone objective-c properties position positioning


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    属性和实例变量是不同的东西;属性表示您的类公开的状态,而实例变量是您可以为您的类实现状态的一种方式。

    当您编写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 属性告诉编译器在获取enabled 属性时生成-isEnabled 消息。 @synthesizeenabled 属性定义为由实例变量 isEnabled_ 支持。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 2011-06-10
      • 2015-11-26
      • 1970-01-01
      相关资源
      最近更新 更多