zoukankan      html  css  js  c++  java
  • oc49--@class

    //  Person.h
    
    #import <Foundation/Foundation.h>
    @class Car;
    
    //#import "Car.h"
    // 由于import是一个预编译指令, 他会将""中的文件拷贝到import所在的位置。
    // 并且import有一个特点, 只要""中的文件发生了变化, 那么import就会重新拷贝一次(更新操作)。
    // @class仅仅是告诉编译器, @class后面的名称是一个类, 不会做任何拷贝操作。
    // 注意: 由于@class仅仅是告诉编译器后面的名称是一个类, 所以编译器并不知道这个类中有哪些属性和方法, 所以在.m中使用这个类时需要import这个类, 才能使用。
    
    /*
     总结:
     1.如果都在.h中import, 假如A拷贝了B, B拷贝了C ,  如果C被修改了, 那么B和A都需要重新拷贝. 因为C修改了那么B就会重新拷贝, 而B重新拷贝之后相当于B也被修改了, 那么A也需要重新拷贝. 也就是说如果都在.h中拷贝, 只要有间接关系都会重新拷贝。也就是说.h文件不使用的但是也要重新拷贝。
     2.如果在.h中用@class, 在.m中用import, 那么如果一个文件发生了变化, 只有和这个文件有直接关系的那个文件才会重新拷贝。因为.m文件没有被别人引入过。
     3.所以在.h中用@class可以提升编译效率,但是代码量变大了。
     
     */
    @interface Person : NSObject
    
    @property(nonatomic, retain)Car *car;
    @end
    //  Person.m
    
    #import "Person.h"
    #import "Car.h"
    
    @implementation Person
    
    @end
    //  Car.h
    
    #import <Foundation/Foundation.h>
    //#import "Wheel.h"
    @class Wheel;
    
    @interface Car : NSObject
    
    @property (nonatomic, retain) Wheel *wheel;
    @end
    //  Car.m
    
    #import "Car.h"
    #import "Wheel.h"
    
    @implementation Car
    
    - (void)dealloc
    {
        [_wheel release];
        [super dealloc];
    }
    @end
    //  Wheel.h
    
    #import <Foundation/Foundation.h>
    
    @interface Wheel : NSObject
    
    @property (nonatomic, assign) int size;
    @end
    //  Wheel.m
    
    #import "Wheel.h"
    
    @implementation Wheel
    
    @end
  • 相关阅读:
    JS跨域访问CORS配置
    在Maven中混用Java和Scala
    Linux下开源可视化工具Caravel安装(包含缺少js解决办法)
    linux环境下NPM安装小结(淘宝镜像)
    Spark学习笔记
    导出HBase数据到Excel(Java代码)
    Spark通过JdbcRdd连接Oracle数据库(scala)
    基于AngularJS+Bootstrap的多文件上传与管理
    Hadoop-1.2.1 安装步骤小结(ubuntu)
    git-remote-https.exe 无法找到入口
  • 原文地址:https://www.cnblogs.com/yaowen/p/7428194.html
Copyright © 2011-2022 走看看