//
// main.m #import <Foundation/Foundation.h>
#import "Person.h" int main(int argc, const char * argv[]) { Person *p = [Person new];
Dog *d = [Dog new]; p.dog = d; [p release];
[d release]; return ;
}
//
// Person.h #import <Foundation/Foundation.h>
//#import "Dog.h"
@class Dog; //.h文件写@class,.m文件写import,提高效率和防止重复导入。 /*
总结:
如果两个类相互拷贝, 例如A拷贝B, B拷贝A, 这样会报错
如何解决: 在.h中用@class, 在.m中用import
因为如果.h中都用import, 那么A拷贝B, B又拷贝A, 会形成死循环
如果在.h中用@class, 那么不会做任何拷贝操作, 而在.m中用import只会拷贝对应的文件, 并不会形成死循环.因为.m文件没有相互引用。
*/ @interface Person : NSObject @property(nonatomic, retain)Dog *dog;
@end
//  Person.m

#import "Person.h"
#import "Dog.h" @implementation Person - (void)dealloc
{
NSLog(@"%s", __func__);
[_dog release];
[super dealloc];
}
@end
//
// Dog.h #import <Foundation/Foundation.h>
//#import "Person.h"
@class Person; @interface Dog : NSObject @property(nonatomic, retain)Person *owner;
@end
//
// Dog.m #import "Dog.h"
#import "Person.h" @implementation Dog -(void)dealloc
{
[_owner release];
NSLog(@"%s", __func__);
[super dealloc];
}
@end

最新文章

  1. 【无私分享:ASP.NET CORE 项目实战(第四章)】Code First 创建数据库和数据表
  2. Date、Calender类及日期和字符串转换
  3. 实现倒计时功能js
  4. github基本操作
  5. Atitit 语音识别的技术原理
  6. DirectX的引用找不到问题
  7. Uva 699The Falling Leaves
  8. 写给自己看的Linux运维基础(四) - python环境
  9. error: Refusing to undefine while domain managed save image exists
  10. a 标签的四个伪类
  11. android studio布局文件/XML怎么代码补全
  12. JS的this总结(上)-call()和apply()
  13. bootstrapru软件官网
  14. 容器化的 DevOps 工作流
  15. Vue 组件&amp;组件之间的通信 之 单向数据流
  16. 性能分析Linux服务器CPU利用率
  17. JQuery禁止回车提交表单
  18. 微信小程序 功能函数 支付接口
  19. Matlab中如何读取.dat文件
  20. iOS:操作队列实现多线程NSOperation

热门文章

  1. [ POI 2011 ] Party
  2. android fragment轻松监听返回键/Fragment中的popupwindow响应返回键隐藏
  3. Git的使用及托管代码到GitHub
  4. android中textview单行显示,多余的省略
  5. Count the consecutive zero bits (trailing) on the right with multiply and lookup
  6. Linux(centOS7.2)+node+express初体验
  7. webstorm中配置过visualsvn,后面做更改要更换authentication realm的解决办法
  8. 【PostgreSQL-9.6.3】分区表
  9. 扩增子图表解读8网络图:节点OTU或类Venn比较
  10. 一文详解Spring Cloud Feign重试机制