OC高效率52之理解屬性

#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
相關文章
相關標籤/搜索