oc49--@class

Posted 672530440

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于oc49--@class的主要内容,如果未能解决你的问题,请参考以下文章

oc引导怎么开机跑代码

oc渲染器提示着色器失败

UIWebView中Html中用JS调用OC方法及OC执行JS代码

缺少带有 ID 的必需视图,导航图 android

OC笔记一:Objective

在oc代码中使用swift第三方框架