Свойства / Недвижимость: геттер не работает!Objective-C iPhone - PullRequest
0 голосов
/ 06 ноября 2010

в моей программе я сделал свойство:

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

-

теперь, если я сделаю:

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

Это просто говорит: BLOCK = 0

но мой блочный объект UIImageView никогда не включается при y = 0!

, пожалуйста, помогите!

Ответы [ 2 ]

2 голосов
/ 06 ноября 2010

CGPoint.y равно CGFloat, поэтому вам нужно использовать %f, чтобы распечатать его.

1 голос
/ 06 ноября 2010

Свойство и переменная экземпляра - это разные вещи; свойство представляет состояние, предоставляемое вашим классом, в то время как переменная экземпляра является одним из способов реализации состояния для вашего класса.

Когда вы писали block.center.y, вы обращались к переменной экземпляра с именем block, не вызывая метод получения свойства. Чтобы вызвать средство получения свойства, вы всегда должны использовать синтаксис точки или сообщения, например:

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. @synthesize определяет свойство enabled как поддерживаемое переменной экземпляра isEnabled_.

Таким образом, вы можете получить доступ к собственности следующим образом:

BOOL shouldDrawView;

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