//声明一个属性等价与声明了一个setter和getter方法
// 属性的类型 属性名
//属性的类型决定生成的setter参数类型和getter返回值类型
//属性名决定于生成的setter方法名和getter方法名
// 属性 属性的类型 属性名
@property (nonatomic, retain)NSString *
name;
//@synthesize 属性的实现 name = _name的含义是
//属性帮你生成的setter方法内部在操作那个实例变量.如果.h里面定义过该实例变量,那么直接操作该实例变量,如果没有定义过,那么会自动帮你生成一个实例变量
//属性是一对方法,setter和getter方法
//属性自动生成的实例变量都是私有的,子类不可以直接访问
//ios5.0之后,@synthesize也可以不写,实例变量定义也可以不写,不写的话,帮你自动生成的实例变量是属性名前加_;例如:@synthesize name = _name;
//私有的实例变量,仅仅是子类不能直接访问,但是子类可以通过从父类继承过来的方法去访问
属性的特性
//一,读写特性
//readonly 只读,属性只会帮我们生成getter ,不生成setter
//readwrite 读写,即生成setter ,也生成getter ,不写默认是(读写readwrit)
//setter = 把生成setter方法重新改名(有冒号:,因为有参数)
//getter = 把生成getter方法重新改名
@property (/*readonly,*/setter=成绩:, getter = 成绩)NSInteger number;
//二,原子性特性
//atomic 原子性特性,保证在多线程下访问该实例变量是安全的(会加一把线程锁),不写默认是aomic
//nonatomic 非原子性特性,不保证在多线程下访问的安全性
//[一半我们都用nonatomic]
@property (nonatomic)CGFloat score;
//三,setter语义特性(assign,ratain,copy会影响生成的setter方法的内部实现)
//assign,通常用于基本类型,生成的setter方法就是直接赋值,不写默认是assign
//retain,适用于所有的基本类型,生成的setter方法里面会有内存优化的代码
//copy,仅使用于接受过NSCoping协议的类的对象,生成的setter方法内部也是有内存优化的代码
@property (nonatomic,assign)NSString * major;
//属性是一对getter、setter方法,点语法是属性的另一种调用格式。
//凡是符合系统默认setter、getter书写格式的方法都可以使用点语法
//只要有setter和getter就可以使用点语法
//.在等号左边,调用是的setter方法
//.在等号邮编,调用是的getter方法
//没有等号出现.调用是getter方法