zoukankan      html  css  js  c++  java
  • oc50--@class1

    //
    //  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 0;
    }
    //
    //  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
  • 相关阅读:
    项目总结_写代码
    项目总结_el表达式
    项目总结plc_过滤器规则(filter)_忽略过滤的js和css文件
    tomcat 启动错误
    每天学点java_Eclipse修改author名
    每天学点java_FileOutputSteam类
    每天学点java_File类
    11.28日日记
    《深入理解计算机系统》学习中期
    开始《深入理解计算机系统》
  • 原文地址:https://www.cnblogs.com/yaowen/p/7428268.html
Copyright © 2011-2022 走看看