二.@property
1.生成get与set方法的声明
2.生成get与set方法的简单实现
3.如果你没有声明对象成员变量,那么他会自动生成一个_开头的成员变量
@property参数分为4类:
1.与set方法内存管理相关参数
retain:要生成符合内存管理原则的set方法(应用与对象类型),引用计数会+1;
assign:直接赋值,(对象类型,基本数据类型而不是NS对象),引用计数不会+1;
copy: 建立一个索引计数为1的对象,然后释放旧对象;
简单的基本数据类型指的是:int,float,double,char,对象类型指的是NS开头的对象
copy与retain的区别:
copy其实是建立了一个相同的对象,而retain不是:
比如一个NSString 对象,地址为0×1111 ,内容为@”STR”
copy 到另外一个NSString 之后,地址为0×2222 ,内容相同,新的对象retain为1 ,旧有对象没有变化
retain 到另外一个NSString 之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1
也就是说,retain 是指针拷贝,copy 是内容拷贝。
2.多线程相关
nonatomic:不生成多线程线管代码
atomic: 生成多线程线管代码(不写默认的就是这个方式)
3.是否生成set与get方法
readwrite:可读可写属性
readonly:只读属性,只生成get方法,如果要修改属性,只能在init方法里赋值
4.set与get方法名称相关的参数
setter:设置生成的set方法名称
getter:设置生成的get方法名称
两者常用于BOOL类型的方法里。来修改原本的set,get方法。
@property(nonatomic,assign,setter:,getter:)int weight;
@property(nonatomic,retain,readonly)NSString name;