pragma mark @class
pragma mark 概念
/**
* @class 可以提升編譯效率
作用是
可以簡(jiǎn)單的引用一個(gè)類(lèi)
簡(jiǎn)單實(shí)用
@class Dog(類(lèi)名)
僅僅告訴編譯器:Dog是一個(gè)類(lèi),并不會(huì)包含Dog這個(gè)類(lèi)的所有內(nèi)容
具體使用
在.h文件中實(shí)用@class引用一個(gè)類(lèi)
在.m文件中使用#import包含這個(gè)類(lèi)的.h文件
總結(jié):
1.如果都在.h中import,假如A拷貝了B,B拷貝了C,如果C被修改了,那么B和A都需要重新拷貝,因?yàn)镃修改了那么B就會(huì)重新拷貝,二B重新拷貝了之后相當(dāng)于B也被拷貝了,那么也就是說(shuō)如果都在.h拷貝,只要有間接關(guān)系都會(huì)重新拷貝
2.如果在.h中用@class,在.m用import,那么如果一個(gè)文件發(fā)生了變化,只有和這個(gè)文件有直接關(guān)系的那個(gè)文件才會(huì)重新拷貝
3. 所以在.h用@class可以提升編譯效率
*/
pragma mark 代碼
#import <Foundation/Foundation.h>
#pragma mark 類(lèi)
#pragma mark main函數(shù)
int main(int argc, const char * argv[])
{
return 0;
}
Person.h //人類(lèi)
#import <Foundation/Foundation.h>
//#import "Car.h"
/*
#import "Car.h"
相當(dāng)于
#import <Foundation/Foundation.h>
@interface Car : NSObject
@end
*/
// 由于import是一個(gè)預(yù)編譯指令,他會(huì)將""中的文件拷貝到所在的位置 \
并且import有一個(gè)特點(diǎn),只要""中的文件發(fā)生了變化,那么import就會(huì)重新拷貝一次(更新操作)
@class Car;
// @class 僅僅是告訴編譯器,@class后面的名稱(chēng)是一個(gè)類(lèi),不會(huì)做任何拷貝操作
// 注意:由于@class僅僅是告訴編譯器后面的名稱(chēng)是一個(gè)類(lèi),所以編譯器并不知道這個(gè)類(lèi)中有哪些屬性和方法,所以在.m中使用這個(gè)類(lèi)時(shí)需要import這個(gè)類(lèi),才能使用
@interface Person : NSObject
@property (nonatomic,retain) Car *car;
@end
Person.m
#import "Person.h"
#import "Car.h"
@implementation Person
@end
Car.h //車(chē)類(lèi)
#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" // 必須要import 要不然不知道_wheel 不知道有哪些方法
@implementation Car
-(void)dealloc
{
[_wheel release];
[super dealloc];
}
@end
Wheel.h //輪子類(lèi)
#import <Foundation/Foundation.h>
@interface Wheel : NSObject
@property (nonatomic,assign)int size;
@end
Wheel.m
#import "Wheel.h"
@implementation Wheel
@end