OC语言day05-10-2@class第二个应用场景

pragma mark @class第二个应用场景

pragma mark 概念

/**

 两个类相互引用,你拷贝我,我拷贝你,出现循环引用
 
 */

pragma mark 代码

#import <Foundation/Foundation.h>
#pragma mark 类
#import "Person.h"
#pragma mark main函数
int main(int argc, const char * argv[])
{
    
    Person *p = [Person new];
    Dog *d = [Dog new];
    
    p.dog = d;
    
    [p release];
    [d release];
    
    return 0;
}


Person.h //人类
#import <Foundation/Foundation.h>
//#import "Dog.h"
/**
 #import "Dog.h"
 相当于
 #import <Foundation/Foundation.h>
 #import "Person.h"
 @interface Dog : NSObject
 @property(nonatomic, retain)Person *owner;
 @end
 */

@class Dog;
/**
 总结: 如果两个类相互拷贝,例如A拷贝B,B拷贝A,这样会保存
 如果解决:在.m中使用class,在.m中用import
 因为如果.h中都没用#import, 例如A拷贝B,B拷贝A,会形成死循环
 
 如果在.h@class,不会做任何拷贝操作,在.m中import 只会拷贝对应的文件,并不会形成死循环
 */
@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;

// #import "Person.h"
// 相当于
//#import <Foundation/Foundation.h>
//#import "Person.h"
//@interface Dog : NSObject
//@property(nonatomic, retain)Person *owner;
//@end

//@interface Person : NSObject
//
//@property(nonatomic, retain)Dog *dog;
//
//@end

@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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似...
    liudhkk阅读 12,960评论 3 38
  • 学习目标 1.【理解】对象在内存中的存储 2.【理解】nil和NULL 3.【了解】#pragma mark分组导...
    Hm丶阅读 3,328评论 0 3
  • Swift 介绍 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 ...
    大L君阅读 8,552评论 3 25
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,845评论 0 9
  • 前言: 所在的公司由于 App 需要改版,而负责上一个 iOS版本开发的攻城狮又离任了。无所事事的我被黄少爷拖下水...
    _ChengChengCh阅读 3,793评论 3 3