- 对象的数据是类内定义的字段,属性是对字段的封装,编译器会自动为属性生成相应的字段及读取方法。
传统的定义方法
@interface XYZPerson : NSObject { @private NSString *_firstName;
NSString *_name; float: _height; } - (NSString *) firstName; - (void) setFirstName : (NSString *) firstName; - (float) height; - (void) setHeight: (float) height; @end用属性的定义方法
@interface XYZPerson : NSObject @property (copy) NSString *firstName; @property float height; @end
实现
@implementation XYZPerson @synthesize firstName; @synthesize height; @end
属性默认是readwrite修饰的,我们可以定义一个只读的属性,用readonly修饰
@property (readonly) NSString *firstName;
自定义属性的访问器
@property (readonly, getter=isFinished) BOOL finished;
属性的访问语法
somePerson.firstName = @"bob"; somePerson.height = 199.0; NSLog("Name is %@", somePerson.firstName);
- 能定义字段与属性的自由结合
@implementation XYZPerson @synthesize propertyName = instanceVariableName; ... @end
@implementation XYZPerson @synthesize firstName = _name; @end
这样对firstName的访问实际上是访问了_name字段。
- 属性默认是修饰atomic,在非多核心的处理器,可以用nonatomic修饰,可以提升点性能
@property (nonatomic, readonly) NSString *firstName;