// 属性
@property NSString *name;
// 属性一共做了三件事
// 1.声明了设置器setter和访问器getter
// 2.实现了设置器和访问器
// 3.声明一个成员变量,成员变量命名会在属性名的前面加一个_
// 具体的数据存储,还是成员变量来完成,属性只不过帮助程序员完成一些琐碎的工作,简化代码
// 属性的属性
// 1.读写控制:readonly,readwrite
// readonly设置后,属性没有setter方法,若没写,则默认是readwrite
// setter和getter的作用是给设置器和访问器的方法重新起个名,注意:设置器在名的设置时要加 :
@property(readnoly)NSString *sex;
@property(setter = sex1:, getter = sex2)NSString *sex;
// 2.原子性控制
// 通过原子性atomic(默认)来监控事务在整个过程中有没有完成,但一般来讲我们就是对数据的简单赋值,一般这部分我们用非原子性nonatomic
@property(nonatomic)NSInteger age;
// 3.语义设置
// copy, assign, retain
// retain一般是对象类型会用到,比如自己写的类,还有NSArry
// assign一般是NSInteger,CGFloat在栈区的变量会用到,不需要内存管理
// copy一般只有字符串会用
@property(nonatomic, copy)NSString *color;
@property(nonatomic, assign)NSInteger age;
@property(nonatomic, retain)NSArray *arr;
// 点语法
// 针对对象的属性,使用点语法来获取对象的内容,也可以进行设置
stu.stuName = @"宋小宝";
NSLog(@"%@", stu.stuName);
// 通过点语法,可以对属性进行操作,大量节省了代码
// 离=号最近的是setter方法,其余都是getter方法
// KVC (key - value - coding)
// 把属性名看成是KVC中的key键,把要修改的值看成value,然后通过KVC的方法,把值赋给指定的key
[stu setValue:@"王二麻子" forKey:@"stuName"];
NSLog(@"%@", stu.stuName);
NSLog(@"%@", [stu valueForKey:@"stuName"]);