每当定义一个类变量的时候我们都会很习惯的在.h文件中写下类似下面那些定义
<span style="font-family:Comic Sans MS;font-size:18px;">@property (nonatomic,retain) MyClass * myclass;
@property (nonatomic,copy) MyClass * myclass;
@property (nonatomic,assign) MyClass * myclass;</span>
这三定义有什么不一样呢,下面我们就要讲讲参数属性了
参数属性一下几种类型
1.原子属性: atomic(对属性加锁,多线程下是安全的,是默认值) ,nonatomic(不加锁,多线程不安全,但是速度快)
2.读写属性: readwrite(生成getter,setter方法,默认值) ,readonly(只生成getter方法)
3.set方法的处理: assign(直接复制,默认值) , retain(先release 原来的值,再retain新值) , copy(先release原来之再copy新的值)
@property 的参数可以有三个参数,没赋值的时候就给默认值 (atomic , readwrite , assign) 在ARC状态下默认值就是( atomic , readwrite,strong)
set方法是根据属性来设置的
1.assign 用于基本的数据类型
<span style="font-family:Comic Sans MS;font-size:18px;">-(void)setA:(int)a
{
_a=a;
}</span>
2.ratain 用于非字符串对象
<span style="font-family:Comic Sans MS;font-size:18px;">-(void)setA:(id*)a
{
if(_a != a)//这个判断避免a重复赋值
{
[_a release];
_a=a;
}
</span><p><span style="font-family:Comic Sans MS;font-size:18px;">}</span></p>
3.copy 常用于字符串对象,block,NAArray,NSDictionary
-(void)setA:(NSString*)a
{
if(_a!=a)
{
<span style="white-space:pre"> </span>[_a release];
<span style="white-space:pre"> </span>_a = [a copy];
}
}
先更新这里以后有新的见解再补充