国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

淺談iOS關于頭文件的導入問題

2019-10-21 18:46:56
字體:
來源:轉載
供稿:網友

關于import和@class的使用問題

.@class的出現可以適當減少編譯時間,提高效率。

現在假設有兩個類,一個是Teacher類,一個是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

在類中聲明三個屬性,其中有一個屬性為Students類屬性。這時候既然使用到Students類,就需要導入該類的頭文件。如如上代碼。

注意:此時使用的是import導入的。這個方法可行但是不夠優雅,存在一個問題,在聲明文件中,我們不需要知道Students類的全部細節,只需要知道類名是Students就可以。如下使用@class解決問題,這叫“向前聲明”該類。

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類的實現文件就需要知道Students類的全部借口細節,因此就需要在此時使用import “Students.h”。

將引入頭文件的時機盡量延后,只有在確有需要的時候才引入,這樣就可以減少類的使用者所需引入的頭文件的數量。假如在.h文件的時候就是用import導入,就會引入很多不需要使用的內容,這必然會增加編譯時間。

.@class的出現也兩個類互相引用的問題。

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”,同時在Teacher類中import “Students”類,這就造成了循環引用問題,程序在編譯的時候就會出現無休止的編譯。此時只需要將其中一個import改成@class即可,如果兩者的.h文件都不需要知道對方類的全部借口細節,最佳方案是全部使用@class。

小結

除非確實有必要,就不要引入頭文件。一般來說,在.h文件中應該使用向前聲明來提及別的類,然后在.m文件引入那些類的頭文件。這樣做可以盡量降低類的耦合。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南康市| 五原县| 师宗县| 拉萨市| 神农架林区| 班戈县| 桐乡市| 益阳市| 城市| 和硕县| 吴忠市| 隆安县| 会昌县| 渝北区| 曲沃县| 咸阳市| 稷山县| 嘉禾县| 南昌县| 洛宁县| 长寿区| 汤原县| 泌阳县| 海伦市| 天门市| 红河县| 运城市| 淮安市| 张北县| 汶川县| 清原| 上饶市| 新安县| 保靖县| 镇平县| 九寨沟县| 湟源县| 齐河县| 宁武县| 晋城| 堆龙德庆县|