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
  • 相关阅读:
    bzoj 1821: [JSOI2010]Group 部落划分 Group
    codevs 1217 借教室
    洛谷 P2678 跳石头
    洛谷 P1316 丢瓶盖
    洛谷 P2683 小岛
    洛谷 P2431 正妹吃月饼
    loj #6092. 「Codeforces Round #418」恋爱循环
    loj #6091. 「Codeforces Round #418」幻想特快
    loj #6090. 「Codeforces Round #418」尘封思绪
    前端移植说明
  • 原文地址:https://www.cnblogs.com/yaowen/p/7428268.html
Copyright © 2011-2022 走看看