1. 读写属性:默认是readwrite,会生成getter和setter方法
如果是readonly表示只会生成getter方法
2. setter处理:默认是assign(赋值),因此基本数据类型不需要加这个参数。
因为在setter方法里,我们经常要将一个对象赋值给类的成员属性,这个时候根据内存管理法则(谁创建,谁释放)要先判断成员变量是不是和新的对象相等,如果相等,则释放旧的对象,再set新的对象:
- (void)setBook:(Book *)book {
if (_book != book) {
[_book release];
_book = [book retain];
}
// _book = book;//arc
}
其中:
retain表示先释放旧的对象,再持有新的对象, retain参数可以达到以上代码的效果。
copy表示先释放旧的对象,再copy新的对象。
3. atomic:表示给方法加锁,保证多线程环境下的线程安全,支持多线程。(默认)
nonatomic:表示不需要加锁,也不需要考虑多线程安全问题,会提高性能(在iOS中经常使用)