ios-MRC下的@property的参数

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的效果是一样的。


你可能感兴趣的:(ios-开发)