1、作用:
@property int age;
1) 生成_age
2) 生成_age的get和set方法的声明
3) 实现_age的get和set方法
2、分类:
1)、 MRC:assign/ retain/ copy/ readwrite、readonly/ nonatomic、atomic 等。
2)、 ARC:assign/ strong/ weak/ copy/ readwrite、readonly/ nonatomic、atomic 等。
3)、原子性:
automic:对原子属性加锁,多线程下安全,默认值,低性能,是防止在写未完成的时候 被另外一个线程读取,造成数据错误。
nonautomic:对原子属性不加锁,多线程下不安全,速度快,高性能
4)、读写属性:(是否要生成setter方法)
readWrite:读写属性,生成getter、setter方法,默认值
readOnly:只读属性,只生成getter方法
5)、
weak 表示对对象的弱引用,被weak修饰的对象随时可被系统销毁和回收。
weak比较常用的地方就是delegate属性的设置。
用weak修饰弱引用,不会使传入对象的引用计数加1。
Set方法处理:
assign:直接赋值,默认
注意:
MRC 和 ARC 都可以用assign。
assign下的setter方法:
-(void)setName :(id)str{
name = str;
}
retain:对对象release旧值,retain新值
copy:release旧值,copy新值
3、注意
1)、set和get方法的名称
修改set和get方法的名称,主要用于布尔类型。因为返回布尔类型的方法名一般以is开头,修改 名称 一般用在布尔类型中的getter。
@property(nonatomic,assign, setter=abc:,getter=haha)int age
可以理解为把[p setAge: ]------> [p abc:], [p age] ---------> [p haha];
2)、assign和weak的区别:
当它们指向的对象释放以后,weak会被自动设置为nil,而assign不会,所以会导致野指针的出现,可能会导致crash。
3)、strong和weak的区别:
strong :表明是一个强引用,相当于MRC下的retain,只要被strong引用的对象就不会被销毁,当所有的强引用消除时,对象的引用计数为0时,对象才会被销毁。
weak : 表明是一个弱引用,相当于MRC下的assign,不会使对象的引用计数+1。
4)、两个不同对象相互strong引用对象,会导致循环引用造成对象不能释放,造成内存泄漏。
网友评论