OC #import 和 @class 的区别以及对象相互引用的解决方案

1、当两个类相互包含的时候,比如 Person.h 中包含 Book.h,而 Book.h 中又包含 Person.h。这个时候就会出现循环引用的问题,造成程序无限递归,从而导致编译无法通过。
2、解决方案
其中一边不要使用 #import 来引入对方的头文件。
而是使用 @class 类名;来标注这是一个类。这样就可以在不引入对方头文件的情况下,告诉编译器这是一个类。
在 .m 文件中再 #import 对方的头文件,这样就可以使用了
3、#import 和 @class 的区别

  • #import 是将指定的文件内容在预编译的时候拷贝到写指令的地方。
  • @class 并不会拷贝任何内容,只是告诉编译器这是一个类。这样编译器在编译的时候才可以知道这是一个类。

4、在 MRC 的情况下,当两个对象相互引用的时候。(当 A 对象的属性是 B 对象,B 对象的属性是 A 对象。此时如果两边都使用 retain 的话,就会发生内存泄露)
5、解决方案

  • 一端使用 retain,另一端使用 assign,使用 assign 的那一端在 dealloc 方法中就不再需要 release 了。

6、在 ARC 的情况下,当两个对象相互引用的时候,并且属性的类型都是 OC 对象,如果此时两边都使用 strong 的话,就会发生内存泄漏。

7、解决方案

  • 一端使用 strong,另一端使用 assign。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值