Свойство и переменная экземпляра - это разные вещи; свойство представляет состояние, предоставляемое вашим классом, в то время как переменная экземпляра является одним из способов реализации состояния для вашего класса.
Когда вы писали 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