#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