1、与多线程相关的atomic、nonatomic,atomic是默认参数
2、与生成的setter方法的实现相关的参数assign是默认参数、retain
3、与生成只读/读写相关的参数readonly、readwrite是默认参数
4、与生成的getter、setter方法名字相关的参数
automic:如果写了这个参数,那么生成的setter方法的代码就会被加上一把线程安全锁,安全,但是效率低
nonatomic:如果是这个的话,那生成的setter方法就不会加线程安全锁,不安全,但是效率高。
assign: 生成的setter方法的实现就是直接赋值
retain:生成的setter的方法的实现就是标准的MRC内存管理代码,就是先判断新旧对象是不是同一个对象,如果不是的话就release旧的对象,retain新的对象。
当属性的类型是OC的对象就用retain,如果是非OC的对象,就使用assign。
readwrite:会同时生成set和get方法
readonly:只会生成get方法,不会生成set方法
默认情况下,@property生成的getter setter方法的名字都是标准的名字
-(void)setAge 和-(int)age 我们可以通过参数来指定@property生成的方法的名字
getter =getter 方法名字 用来指定@property生成的getter方法的名字
比如说@property(nonatomic,assign,getter=isAge)int age;
setter=setter方法名字,用来指定@property生成的setter方法的名字,这里要注意下setter方法是带参数的要加一个冒号,比如说
@property(nonatomic,assign,setter=xxxage:)int age;
如果使用getter setter修改了生成的方法的名字,在使用点语法的时候,编译器会转换调用修改后的名字的代码
比如说我修改成这样子了@property(nonatomic,assign,setter=xxx:,getter=xxh)int age;
还是可以直接调用hell.age=10, NSLog(@"%d",hell.age);这样来使用 hell.xxh这样的效果和hell.age的效果是一样的。