@class使用場景一(如上圖)
#import "Car.h"
// 由于import是一個(gè)預(yù)編譯指令, 他會(huì)將""中的文件拷貝到import所在的位置
// 并且import有一個(gè)特點(diǎn), 只要""中的文件發(fā)生了變化, 那么import就會(huì)重新拷貝一次(更新操作)
@class Car;
// @class僅僅是告訴編譯器, @class后面的名稱是一個(gè)類, 不會(huì)做任何拷貝操作
// 注意: 由于@class僅僅是告訴編譯器后面的名稱是一個(gè)類, 所以編譯器并不知道這個(gè)類中有哪些屬性和方法, 所以在.m中使用這個(gè)類時(shí)需要import這個(gè)類, 才能使用
總結(jié):
1.如果都在.h中import, 假如A拷貝了B, B拷貝了C , 如果C被修改了, 那么B和A都需要重新拷貝. 因?yàn)镃修改了那么B就會(huì)重新拷貝, 而B重新拷貝之后相當(dāng)于B也被修改了, 那么A也需要重新拷貝. 也就是說如果都在.h中拷貝, 只要有間接關(guān)系都會(huì)重新拷貝
2.如果在.h中用@class, 在.m中用import, 那么如果一個(gè)文件發(fā)生了變化, 只有和這個(gè)文件有直接關(guān)系的那個(gè)文件才會(huì)重新拷貝
3.所以在.h中用@class可以提升編譯效率
@class使用場景二(如上圖)
總結(jié):
如果兩個(gè)類相互拷貝, 例如A拷貝B, B拷貝A, 這樣會(huì)報(bào)錯(cuò)
如何解決: 在.h中用@class, 在.m中用import
因?yàn)槿绻?h中都用import, 那么A拷貝B, B又拷貝A, 會(huì)形成死循環(huán)
如果在.h中用@class, 那么不會(huì)做任何拷貝操作, 而在.m中用import只會(huì)拷貝對(duì)應(yīng)的文件, 并不會(huì)形成死循環(huán)