@property做了什么
@property :
在类的接口中、分类接口、协议中声明属性。格式:@property (特性) 属性类型 属性名称。
它会设置与属性关联的setter/getter方法,但是无法完成真正的方法定义。
@synthesize:
在实现文件中完成属性setter/getter方法的定义、实例变量的定义,并在setter/getter方法中使用这些实例变量。
老版本中(LLVM编译器4.2之前),@property要和@synthesize配合使用才能为我们完成以上工作。而在现在,只需要使用@property一个关键字就可完成上面的工作。
@property的可选特性
原子性
- nonatomic,不会生成多线程同步的相关代码。导致,设置的值取出后不一定相同。
- atomic,不会出现上面的情况。
setter语义(前一个非ARC,后一个ARC)
- 只有OC对象的属性才需要内存管理,C语言的基本类型,不需要内存管理。
- retain/strong,赋值时,输入的值会被发生一条保留消息,旧值会被发送一条释放消息。
- assign/weak,两着类似,但是weak时,引用对象释放后,值会变为nil。
- copy,赋值时,旧值会被发送一条释放消息,新值会是传入值的副本,和strong的区别是,strong会和传入值使用同一块内存。
- getter=getterName,setter=setterName.设置存取方法的名称。
读写控制
- read-only,不会生成setter方法,控制写权限
- readwrite,可读可写。