1.@class基本概念
- 作用:可以簡(jiǎn)單地引用一個(gè)類(lèi)
- @class Person;
- 僅僅是告訴編譯器:Person是一個(gè)類(lèi);并不會(huì)包含Person這個(gè)類(lèi)的所有內(nèi)容
具體使用 - 在.h文件中使用@class引用一個(gè)類(lèi)
- 在.m文件中使用#import包含這個(gè)類(lèi)的.h文件
- 僅僅是告訴編譯器:Person是一個(gè)類(lèi);并不會(huì)包含Person這個(gè)類(lèi)的所有內(nèi)容
2.@class其它應(yīng)用場(chǎng)景
- 對(duì)于循環(huán)依賴(lài)關(guān)系來(lái)說(shuō)末荐,比方A類(lèi)引用B類(lèi)嫁佳,同時(shí)B類(lèi)也引用A類(lèi)
- 這種嵌套包含的代碼編譯會(huì)報(bào)錯(cuò)
#import "B.h"
@interface A : NSObject
{
B *_b;
}
@end
#import “A.h"
@interface B : NSObject
{
A *_a;
}
@end
- 當(dāng)使用@class在兩個(gè)類(lèi)相互聲明,就不會(huì)出現(xiàn)編譯報(bào)錯(cuò)
@class B;
@interface A : NSObject
{
B *_b;
}
@end
@class A;
@interface B : NSObject
{
A *_a;
}
@end
3.@class和#import作用上的區(qū)別
#import會(huì)包含引用類(lèi)的所有信息(內(nèi)容),包括引用類(lèi)的變量和方法
@class僅僅是告訴編譯器有這么一個(gè)類(lèi), 具體這個(gè)類(lèi)里有什么信息, 完全不知
效率上的區(qū)別如果有上百個(gè)頭文件都#import了同一個(gè)文件土辩,或者這些文件依次被#import,那么一旦最開(kāi)始的頭文件稍有改動(dòng)轿腺,后面引用到這個(gè)文件的所有類(lèi)都需要重新編譯一遍 , 編譯效率非常低
相對(duì)來(lái)講,使用@class方式就不會(huì)出現(xiàn)這種問(wèn)題了