关于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
- 关于property参数的理解
- 关于@property的一点理解
- 关于@property参数的全面解析
- 关于@ synthesize和@property的理解
- @property的属性参数
- @property的参数说明
- @property的参数
- @property的参数
- 枚举的@property参数
- @property 参数(property 的进阶用法)
- OpenGL关于glBegin的参数的理解
- 关于c++可变参数的理解
- 关于html参数传递的一些理解
- 关于android中Context参数的理解
- 关于Python可变参数的理解
- servlet 关于传递参数的理解
- 关于构造函数传递参数的理解
- 关于S参数的一些理解
- jquery 获取父窗口的元素 父窗口与子窗口间交互
- java异常
- Android程序报错:java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.
- php常见问题收集
- linux 如何查看硬盘大小,内存大小等系统信息及硬件信息
- 关于property参数的理解
- [C++]Deque with iterator实现细节
- JavaScript学习笔记五:循环
- 【android内核剖析笔记】APK程序的运行过程
- c#转换ASCII,很不错
- Swift-@UIApplicationMain
- 51nod 1010 因子只有2 3 5 的数 也就是 丑数
- 终端下nc命令传送文件
- Laravel一个页面里有多个分页并用jQuery pagination.js实现