#import <Foundation/Foundation.h> @interface EOCPerson : NSObject { @public//在编译期固定做用域 NSString *_firstName; NSString *_lastName; @private NSString *_someInternalData; //尽可能不要直接访问实例变量,应该经过存取方法来作。 } //属性特质 @property (nonatomic,readwrite,copy) NSString *familyName; //nonatomic 不使用同步锁,iOS中使用同步锁开销太大,并且并不能彻底实现“线程安全” //readwrite 属性拥有 获取方法和设置方法 @synthesize实现,编译器则会自动生成这两个方法 //readonly 仅拥有获取方法 对外公开为只读属性 //内存管理语义 //assign 只针对纯量类型 例如CGFloat NSInteger //strong 拥有关系 “对象”使用 //copy 与strong相似 拷贝新值 //指定存取方法名 @property (nonatomic,getter=isOn,setter=isOnbool:)BOOL on; @property NSString *firstName; @property NSString *lastName;//自动编写存取方法 //等效于 下面的方法 -(NSString*)firstName; -(void)setFirstName:(NSString *)firstName; -(NSString*)lastName; -(void)setLastName:(NSString *)lastName; -(BOOL)isOn;//指定getter方法名 @end @implementation EOCPerson @dynamic firstName,lastName;//dynamic关键字 会告诉编译器不要自动建立实现属性所用的实例变量,也不要为其建立存取方法。 -(void)setOn:(BOOL)on{}; @end #import "ViewController.h" #import "EOCPerson.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. EOCPerson *person = [[EOCPerson alloc]init]; person.firstName = @"Zou";//same as; [person setFirstName:@"Zou"]; person.lastName = @"Jie";//same sa [person setLastName:@"Jie"]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end