了 就跟我们普及一下啊.
strong是ARC版的retain
都表示强引用
其中,MRC的retain,同一个对象可以多次使用,不会出什么问题
只要你记得release
ARC版的strong就不能这么干了,同一个对象只能被strong一次。
retain可以不断 +1,而strong就只是+1一次的意思啊
其它任何地方对这个对象的引用,只能用weak。不然就会发生循环引用,造成这个对象永远释放不掉。
在ARC里,strong和weak是成对使用的。
顺便解释一下weak
知道的兄弟可以补充
weak是assign的ARC版
都是弱引用
代理设置成weak 也是为了避免 循环引用
对象的引用是assign时,当它被释放后,那个变量还指向那个地址。即使那个地址什么都没有。就是常说的也指针。
对象的引用,一定是有个变量的
我说的是变量
在ARC里,我们使用weak来弱引用某个对象。当这个对象被释放时,变量不再指向那个地址,而是自动指向nil
利用这一点,我们可以在定义delegate时,设置引用为weak。这样,就不再需要写类似xxx.delegate = nil这种代码了。
理解了weak的含义,就能明白为什么IBOutlet的对象必须用weak来弱引用。
strong是ARC版的retain
都表示强引用
其中,MRC的retain,同一个对象可以多次使用,不会出什么问题
只要你记得release
ARC版的strong就不能这么干了,同一个对象只能被strong一次。
retain可以不断 +1,而strong就只是+1一次的意思啊
其它任何地方对这个对象的引用,只能用weak。不然就会发生循环引用,造成这个对象永远释放不掉。
在ARC里,strong和weak是成对使用的。
顺便解释一下weak
知道的兄弟可以补充
weak是assign的ARC版
都是弱引用
代理设置成weak 也是为了避免 循环引用
对象的引用是assign时,当它被释放后,那个变量还指向那个地址。即使那个地址什么都没有。就是常说的也指针。
所以,以前的代码里,在dealloc方法里,会写xxx.delegate = nil这种代码。就是为了防止野指针。
对象的引用,一定是有个变量的
我说的是变量
在ARC里,我们使用weak来弱引用某个对象。当这个对象被释放时,变量不再指向那个地址,而是自动指向nil
利用这一点,我们可以在定义delegate时,设置引用为weak。这样,就不再需要写类似xxx.delegate = nil这种代码了。
理解了weak的含义,就能明白为什么IBOutlet的对象必须用weak来弱引用。