淺談iOS關(guān)于頭文件的導(dǎo)入問(wèn)題
關(guān)于import和@class的使用問(wèn)題
一.@class的出現(xiàn)可以適當(dāng)減少編譯時(shí)間,提高效率。
現(xiàn)在假設(shè)有兩個(gè)類,一個(gè)是Teacher類,一個(gè)是Students類。
Teacher類
#import <Foundation/Foundation.h> #import "Students.h" @interface Teacher : NSObject @property (copy,nonatomic)NSString *firstName; @property (copy,nonatomic)NSString *lastName; @property (strong,nonatomic)Students *student; @end
在類中聲明三個(gè)屬性,其中有一個(gè)屬性為Students類屬性。這時(shí)候既然使用到Students類,就需要導(dǎo)入該類的頭文件。如如上代碼。
注意:此時(shí)使用的是import導(dǎo)入的。這個(gè)方法可行但是不夠優(yōu)雅,存在一個(gè)問(wèn)題,在聲明文件中,我們不需要知道Students類的全部細(xì)節(jié),只需要知道類名是Students就可以。如下使用@class解決問(wèn)題,這叫“向前聲明”該類。
Teacher.h
#import <Foundation/Foundation.h> @class Students; @interface Teacher : NSObject @property (copy,nonatomic)NSString *firstName; @property (copy,nonatomic)NSString *lastName; @property (strong,nonatomic)Students *student; @end
Teacher.m
#import "Teacher.h" #import "Students.h" @implementation Teacher @end
Teacher類的實(shí)現(xiàn)文件就需要知道Students類的全部借口細(xì)節(jié),因此就需要在此時(shí)使用import “Students.h”。
將引入頭文件的時(shí)機(jī)盡量延后,只有在確有需要的時(shí)候才引入,這樣就可以減少類的使用者所需引入的頭文件的數(shù)量。假如在.h文件的時(shí)候就是用import導(dǎo)入,就會(huì)引入很多不需要使用的內(nèi)容,這必然會(huì)增加編譯時(shí)間。
二.@class的出現(xiàn)也兩個(gè)類互相引用的問(wèn)題。
Teacher.h
#import <Foundation/Foundation.h> #import "Students.h" @interface Teacher : NSObject @property (copy,nonatomic)NSString *firstName; @property (copy,nonatomic)NSString *lastName; @property (strong,nonatomic)Students *student; @end
Students.h
#import <Foundation/Foundation.h> #import "Teacher.h" @interface Students : NSObject @property (strong,nonatomic)Teacher *teacher; @end
在Students類中import “Teacher.h”,同時(shí)在Teacher類中import “Students”類,這就造成了循環(huán)引用問(wèn)題,程序在編譯的時(shí)候就會(huì)出現(xiàn)無(wú)休止的編譯。此時(shí)只需要將其中一個(gè)import改成@class即可,如果兩者的.h文件都不需要知道對(duì)方類的全部借口細(xì)節(jié),最佳方案是全部使用@class。
小結(jié)
除非確實(shí)有必要,就不要引入頭文件。一般來(lái)說(shuō),在.h文件中應(yīng)該使用向前聲明來(lái)提及別的類,然后在.m文件引入那些類的頭文件。這樣做可以盡量降低類的耦合。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
iOS實(shí)現(xiàn)從通訊錄中選擇聯(lián)系人
這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)從通訊錄中選擇聯(lián)系人,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-0899%?iOS開(kāi)發(fā)都不知道的KVO崩潰分析詳解
這篇文章主要為大家介紹了99%?iOS開(kāi)發(fā)都不知道的KVO崩潰分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01淺談關(guān)于如何檢測(cè)iOS14本地網(wǎng)絡(luò)權(quán)限的一些思路
這篇文章主要介紹了淺談關(guān)于如何檢測(cè)iOS14本地網(wǎng)絡(luò)權(quán)限的一些思路,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09ios中g(shù)etTime()的兼容性實(shí)例代碼
在本篇文章里小編給大家整理的是關(guān)于ios中g(shù)etTime()的兼容性實(shí)例代碼,需要的朋友們可以學(xué)習(xí)下。2020-03-03iOS實(shí)現(xiàn)帶指引線的餅狀圖效果(不會(huì)重疊)
餅狀圖對(duì)大家來(lái)說(shuō)應(yīng)該都不陌生,下面這篇文章主要給大家介紹了關(guān)于iOS實(shí)現(xiàn)帶指引線的餅狀圖效果(不會(huì)重疊)的相關(guān)資料,文章通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-04-04淺談強(qiáng)大易用支持URL Rewrite的iOS路由庫(kù)FFRouter
FRouter 是 iOS 中一個(gè)強(qiáng)大且易用的 URL 路由庫(kù),支持 URL Rewrite,基于匹配查找 URL,效率高。非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-10-10iOS開(kāi)發(fā)學(xué)習(xí) ViewController使用示例詳解
這篇文章主要為大家介紹了iOS開(kāi)發(fā)學(xué)習(xí) ViewController使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10iOS UICollectionView刷新時(shí)閃屏的解決方法
本篇文章主要介紹了iOS UICollectionView刷新時(shí)閃屏的解決方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11