在定义property的时候,有时加week属性,有时候用strong,网上的说法感觉都好抽象,有没有人解释一下一般情况下怎么用

解决方案 »

  1.   

    首先  weak不是week
    另外,这个讲的蛮有意思 分享一下  http://blog.csdn.net/jevinss/article/details/8473560
      

  2.   

    默认情况下,一个指针都会使用 strong 属性,表明这是一个强引用。这意味着,只要引用存在,对象就不能被销毁。这是一种所期望的行为:当所有(强)引用都去除时,对象才能被收集和释放。不过, 有时我们却希望禁用这种行为:一些集合类不应该增加其元素的引用,因为这会引起对象无法释放。在这种情况下,我们需要使用弱引用(不用担心,内置的集合类 就是这么干的),使用 weak 关键字。NSHashTable 就是一个例子。当被引用的对象消失时,弱引用会自动设置为 nil
      

  3.   

    weak引用,主要为了解决retain cycle问题,Objective-C中的retain cycle问题和c++中智能指针的循环引用问题是一个道理。在c++中可以通过weak_ptr来解决。在Objective-C中就是通过弱引用来解决。因为弱引用不增加对象的保留计数器。
      

  4.   

    所谓retain cycle问题,大概是这样:比如对象A创建了对象B,所以对象A拥有一个指向对象B的强引用。现在如果对象B也有一个指向对象A的强引用。那么对象A的保留计数器的值就会增加到2。当对象A的拥有者向其发送release消息时,对象A的引用计数减少为1,(不是0)所以没有被销毁。因为对象A还在,所以它没有向对象B发送release消息,所以对象B的保留计数器的值也为1,所以B也没有被销毁。这样就造成了内存泄露。