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
相关文章
相关标签/搜索