//属性作用:自动生成setter和getter方法
//属性定义:@property+属性的类型(类型与内部操作的实例变量的类型相同)+属性名(和内部操作实例变量名相同)
//属性在.h文件中, 自动生成的是setter和getter方法的声明
//属性特性,
//1.读写特性
//(1)可读可写------ 读, getter方法; 写,setter方法.即会生成两种方法
//(2)readonly 只读, 只会生成getter方法
//(3)setter = 方法名 指定在生成setter方法时, setter方法的方法名, getter 同理
//2.原子特性
//(1)atomic(原子性):保证线程安全, 系统默认
//(2)noatomic(非原子性):不保证线程安全, 系统推荐
//为什么要用noatomic:对于setter和getter方法可能要在一段时间内 频繁的调用, 如果每次都要加锁与解锁 会非常的消耗系统资源, 降低程序的执行效率, 因此从效率上考虑使用noatomic非原子性
//3.语义特性
//(1)assign:针对于基本数据类型, (NSInteger, CGFloat, BOOL, int, long, float, double), 也可以用于对象, 默认的语义特性
//(2)retain:只能针对对象设置, 使对象的引用计数+1
//(3)copy:只能针对对象, 复制出一个新的对象, 使新的对象引用计数+1
实现部分中
//当系统自动生成setter以及getter方法实现时, 如果指定的setter以及getter方法没有定义, 则系统自动生成该实例变量
//warning 记住:系统自动生成的实例变量是私有的, 子类不能访问
//当生成setter以及getter方法实现时, 如果没有指定内部所操作的实例变量, 系统默认生成的是与属性名同名的实例变量
//@synthesize作用
//1.生成setter以及getter方法的实现
//2.自动生成内部操作的实例变量
//(@synthesize是系统帮我们写好的 不需要我们去操作, 因此@synthesize可做了解知识)