关于property参数的理解

之前对于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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值