ARC所有权修饰符--__weak修饰符

来源:互联网 发布:p2p理财 知乎 编辑:程序博客网 时间:2024/06/05 20:07

ARC所有权修饰符–__weak修饰符

在上篇ARC所有权修饰符–__strong修饰符中,看起来通过__strong修饰符就可以完美的管理内存了,但是仅仅通过__strong修饰符是不能解决“循环引用”问题的。
这里写图片描述
循环引用容易发生内存泄漏。所谓的内存泄漏就是当废弃的对象在超出其生存周期后继续存在。

怎样才能避免循环引用呢?既然有strong,就应该有weak。也就是说,使用__weak修饰符可以避免循环引用。__weak与__strong相反,提供弱引用,弱引用不能持有对象实例。id __weak obj = [[nsobject alloc]init];//编译器会发生警告,(将自己生成并持有的对象赋值给附有__weak修饰符的变量obj),写成下面这样就可以了:{id obj = [[nsobject alloc]init];id __weak obj1 = job;

}

因为带__weak修饰符的变量(即弱引用)不持有对象,所以在超出其变量的作用域时,对象即被释放。将可能发生循环引用的类成员变量改成附有__weak修饰符的成员变量的话,就可以避免循环引用。__weak修饰符还有另一个有点,在持有某对象的弱引用时,若该对象被废弃,则此弱引用将自动失效且处于nil被赋值的状态(空弱引用)。
0 0
原创粉丝点击