1. @property参数.
1). @property可以带参数的.
@property(参数1,参数2,参数3......)数据类型 名称;
2). 介绍一下@property的四组参数.
a. 与多线程相关的两个参数.
atomic、nonatomic.
b. 在MRC模式下修饰对象和基本数据类型的两个参数
assign、retain.
c. 在ARC模式下修饰对象和基本数据类型的三个参数
assign、Strong、weak
d. 与生成只读、读写相关的参数
readonly readwrite
e. 是与生成的getter setter方法名字相关的参数.
getter setter
2. 介绍与多线程相关的参数.
atomic: 默认值. 如果写atomic,这个时候生成的setter方法的代码就会被加上一把线程安全锁.
特点: 安全、效率低下.
nonatomic: 如果写nonatomic 这个时候生成的setter方法的代码就不会加线程安全锁.
特点: 不安全,但是效率高.
无论在ARC还是在MRC都可以使用.
建议: 要效率. 选择使用nonatomic 在没有讲解多线程的知识以前 统统使用nonatomic
3. 在MRC模式下修饰对象和基本数据类型的两个参数
assign: 修饰基本数据类型,默认值生成的setter方法的实现就是直接赋值.
无论在ARC还是在MRC都可以使用.
retain: 修饰OC对象数据类型,生成的setter方法的实现就是标准的MRC内存管理代码.
当属性的类型是OC对象的时候.绝大多数情况下使用retain. 只有在出现了循环引用
的时候1边retain 1边assign
千万注意:
retain参数.只是生成标准的setter方法为标准的MRC内存管理代码 不会自动的再dealloc中
生成relase的代码.
所以, 我们还要自己手动的在dealloc中release
4. 在ARC模式下修饰对象和基本数据类型的三个参数
assign: 修饰基本数据类型,默认值生成的setter方法的实现就是直接赋值.
无论在ARC还是在MRC都可以使用.
strong:修饰OC对象数据类型,只能使用在ARC机制下. 当属性的类型是OC对象类型
的时候,绝大多数情况下使用strong],只有出现了循环引用的时候, 1端strong 1端weak
weak:修饰OC对象数据类型,只能使用在ARC机制下. 当属性的类型是OC对象的时候.
只有出现了循环引用的时候, 1端strong 1端weak
5. 与生成只读、读写的封装.
readwrite: 默认值.代表同时生成getter setter
readonly: 只会生成getter 不会生成setter
无论是ARC还是MRC 都可以使用.
6. 生成getter、setter方法名称相关的参数.
无论在ARC下还是在MRC下都可以改.
默认情况下.@property生成的getter setter方法的名字都是最标准的名字.
其实我们可以通过参数来指定@property生成的方法的名字.
getter = getter方法名字 用来指定@property生成的getter方法的名字.
setter = setter方法名字.用来指定@property生成的setter方法的名字. 注意.setter方法是带参数的
所以要加1个冒号.
记住:如果使用getter setter修改了生成的方法的名字.
在使用点语法的时候.编译器会转换为调用修改后的名字的代码.
无论什么情况都不要改setter方法的名字. 因为默认情况下生成的名字就已经是最标准的了.
什么时候修改getter方法的名字.当属性的类型是1个BOOL类型的时候.就修改这个getter的
名字以is开头 提高代码的阅读性.
7.copy拷贝
NSString和block都需要用copy修饰,它把赋值给她对象的值copy一份出来,如果修改
原始的地址对应的值,是不会改变当前被copy修饰的参数的值的
------使用参数注意-----
1. 同1组参数只能使用1个.
getter setter可以同时使用.
2. 参数的顺序可以随意.
3. 在ARC机制下,出现循环利用1边strong 1边weak
4. 代理必须用weak修饰
5. 如果同时重写getter和setter方法property是不会生成下划线属性的
6. 无论在MRC还是ARC下,如果属性的类型是NSString类型. @property参数使用copy.