iOS中代理属性为什么要用Weak修饰?

来源:互联网 发布:黑马程序员就业班考试 编辑:程序博客网 时间:2024/04/29 16:14

每个对象的创建都需要在内存中分配一定的空间,简单的说,因为内存是有限的,所以一些没有必要存在的对象,我们需要及时的去将它释放,还原更多的内存空间(如果不进行释放就会造成”内存泄露”).

因此,在iOS中引入了引用计数(retainCount)这个词汇,规定:只要引用计数为零,对象就会被释放,.

strong属性会使引用计数+1,而weak修饰的对象不会使引用计数改变.

如果定义代理为weak的话,在程序运行的时候不会造成循环引用,对象都会被顺利的销毁.
如果定义代理为weak的话,在程序运行的时候会造成循环引用(意思就是reatainCount不为0,只要有实线引用,计数器就+1),对象都不会的销毁,不会调用delloc方法,从而造成了内存泄露的问题

1 0