iOS中strong&weak和_block&_weak的作用比较

strong & weak:

iOS 开发中经常会用strong和weak来修饰一些属性,这两个的区别又在哪。。

就像图片中的这样,A和B都要引用C对象,可是A和C之间是实线(强引用),B和C之间是虚线(弱引用)。不论B是否还在引用C(即不论虚线是否存在),只要当A还在引用C的时候,表明实线还在,那么C就会一直占用一块内存空间,不会被释放;但是当A不再引用C,实线不存在了,就表明没有强指针再指向C了,这时候即使B还在引用C,虚线还存在,那么C也一样会被释放,不会在内存中再占有内存空间。不论虚线是否存在,只要实线在,C就在,实线不在,C在内存中就不存在了。


stackoverflow上面这个讲的也蛮好理解的。

http://stackoverflow.com/questions/9262535/explanation-of-strong-and-weak-storage-in-ios5 

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

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

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

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

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

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

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


_block & _weak:

在block代码块中也会用类似代码来修饰变量,例如:__weak typeof(self) wself = self;

__block  为了改变block代码块外部的变量。例如:你在外面定义了一个整形变量,想要在block块内改变他,那么,就要用__block 来修饰这个整形变量。
__weak 是为了防止循环引用,引起内存泄露的问题。 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值