iOS开发-retain/assign/strong/weak/copy/mutablecopy/autorelease区别

readwrite:是可读可写特性,需要生成getter和setter方法;
readonly是之都特性,只会生成getter方法,不会生成setter方法,不希望属性在类外改变时候使用;
alloc 对象分配后引用计数为1retain 对象的引用计数+1
copy 一个对象变成新的对象(新内存地址) 引用计数为1 原来对象计数不变
assign:是赋值特性,setter方法将传入参数赋值给实例变量(一把钥匙,同进同出);用于基础数据类型;
weak:由ARC引入的对象变量的属性,比assign多了一个功能,对象消失后把指针置为nil,避免了野指针(不是null指针,是指向“垃圾”内存(不可用的内存)的指针);
retain:表示持有特性,setter方法将传入参数先保留,后赋值(两把钥匙,各自进出),传入参数的retaincount加1;
strong:ARC引入,等同于retain;
copy:表示赋值特性,setter方法将传入对象复制一份;需要完全一个新的对象时候(两套房子,两把钥匙)
nonatomic:非原子操作,决定编译器生成setter和getter方法是否原子操作,不加同步,多线程访问提高性能,
__unsafe_unretain:对象引用不会加1,对象释放后,不会置为nil,可能造成野指针,尽量少用。
autorelease:对象引用计数-1 如果为0不马上释放,最近一个个pool时释放



weak 和strong的区别:

(weak和strong)不同的是 当一个对象不再有strong类型的指针指向它的时候 它会被释放  ,即使还有weak型指针指向它。

一旦最后一个strong型指针离去 ,这个对象将被释放,所有剩余的weak型指针都将被清除。

可能有个例子形容是妥当的。

想象我们的对象是一条狗,狗想要跑掉(被释放)。

strong型指针就像是栓住的狗。只要你用牵绳挂住狗,狗就不会跑掉。如果有5个人牵着一条狗(5个strong型指针指向1个对象),除非5个牵绳都脱落 ,否着狗是不会跑掉的。

weak型指针就像是一个小孩指着狗喊到:“看!一只狗在那” 只要狗一直被栓着,小孩就能看到狗,(weak指针)会一直指向它。只要狗的牵绳脱落,狗就会跑掉,不管有多少小孩在看着它。

只要最后一个strong型指针不再指向对象,那么对象就会被释放,同时所有的weak型指针都将会被清除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值