关于property参数的理解

来源:互联网 发布:奥尼尔在太阳数据 编辑:程序博客网 时间:2024/06/07 10:50

之前对于property的参数,一直是弄得云里雾里的,不知道这些参数到底有啥用,最近学了内存管理,算是对它有了一点理解,我也来总结一下把。(推荐看这篇文章之前先了解一下内存管理的基本知识iOS内存管理初认识)

首先,参数分三类:

原子性:atomic/nonatomic (默认是atomic)

atomic:对属性加锁,只能一个线程对它进行访问,多线程下安全

nonatomic:对属性不加锁,多线程下不安全(速度比较快,一般不使用多线程的情况下都用它)

读写:readwrite/readonly(默认是readwrite)

readwrite:生成setter和getter方法

内存:assign/retain/copy(iOS5以后在ARC中用strong/weak

assign:在set方法中是直接赋值,不改变引用计数,一般用于基本类型,否则容易造成内存泄漏。(建议先看看内存管理的知识,这些就很容易理解了)

retain:在set方法中先release原来的值,再retain一个新值,地址相同。

copy:先release原来的值,再copy新值,就是生成一个新的对象并且引用计数为1,地址不同。(copy与retain的区别就是:copy其实是建立了一个相同的对象(不同的地址),而retain只是保存其对象,并且其计数值+1。retain是指针拷贝,copy是内容拷贝)

strong:用来修饰强引用的属性,是强指针,是对象的拥有者(一个对象可以有多个拥有者),能保持对象的生命(在ARC中默认是strong指针)

weak:用来修饰弱引用的属性,是弱指针,可以指向一个对象,但不是对象的拥有者,如果对象被释放,该指针变量会自动变为nil,这样阻止了weak指针继续指向已释放对象,避免了野指针的产生,不然会导致非常难于寻找的Bug,空指针消除了类似的问题。

weak指针主要用于“父-子”关系,父亲拥有一个儿子的strong指针,因此父亲是儿子的所有者;但为了阻止所有权循环,儿子需要使用weak指针指向父亲。典型例子是delegate模式,你的ViewController通过strong指针(self.view)拥有一个UITableView, UITableView的dataSource和delegate都是weak指针,指向你的ViewController

1 0
原创粉丝点击