属性是OC的一项特性,用于封装对象中的数据 OC对象通常会把其所需要的数据保存为各种属性 属性通过存取方法来访问(setter、getter)
例如:在Person类中定义了2个属性
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property NSString *firstName;
@property NSString *lastName;
@end
等同于
#import <Foundation/Foundation.h>
@interface Person : NSObject
- (void)setFirstName:(NSString *)firstName;
- (NSString *)firstName;
- (void)setLastName:(NSString *)lastName;
- (NSString *)lastName;
@end
Person *per = [[Person alloc]init];
per.firstName = @"Bob";//等同于[per setFirstName:@"Bob"];
NSString *lastName = per.lastName; //等同于NSString *lastName = [per lastName];
#import "Person.h"
@implementation Person
@synthesize firstName = _firstName;
@synthesize lastName = _lastName;
@end
#import "Person.h"
@implementation Person
@dynamic firstName;
@dynamic lastName;
@end
//当你在通过点语法或调用方式时程序就会崩溃,因为并没有setter、getter方法
Person *per = [[Person alloc]init];
per.firstName = @"Bob";
NSString *lastName = NSString *lastName = [per lastName];
属性的特质也会影响编译器所生成的存取方法,分为四类:原子性、读写权限、内存管理关键字、方法名
@property (nonatomic,getter=isOn) BOOL on;