Objective-C檔案組織介紹(附程式碼)

mymdeep發表於2018-10-05

介面與實現

Objective-C類的程式碼分為兩部分,一部分是介面,用來展示類的構造:

#import <Foundation/Foundation.h>
#import "Hand.h"
#import "Foot.h"
@interface Person : NSObject
{

    NSString *name;
    NSString *sex;
    NSString *age;
    Hand *hands[2];
    Foot *foots[2];

}
-(void)setName:(NSString*) name;
-(void)setSex:(NSString*) sex;
-(void)setAge:(NSString*) age;
-(void)print;
-(void)desc;
@end複製程式碼

這部分程式碼一般放在標頭檔案中,一般以.h結尾。
另一部分是實現:

@implementation Person
-(void)setName:(NSString*) n{
    name = n;
}
-(void)setSex:(NSString*) s{
    sex = s;
}
-(void)setAge:(NSString*) a{
    age = a;
}
-(void)print{
    NSLog(@"name:%@,sex:%@,age:%@",name,sex,age);
}
-(id)init{
   ……
    return self;
}
-(void)desc{
    ……
}
@end複製程式碼

所有的實現都放在與類同名但以.m為字尾的檔案中。
如果使用.mm做檔案的副檔名,就可以使用c++和Objective-C混合程式設計了。

標頭檔案

匯入標頭檔案有兩種方式,一種是使用引號,一種是使用尖括號。尖括號用於匯入系統標頭檔案,引號匯入本地標頭檔案。

#import語句就像#include,本質是進行了剪下和貼上的操作,將Foot.h和Hand.h的檔案內容貼上到Person中。

檔案之間的依賴關係

在上述程式碼中Person依賴於Foot和Hand,一般Foot和Hand其中一個產生任何變化,Person都會重新進行編譯。
Objective-C提供了一種方法,減少這種重新編譯的負面影響。就是使用@class關鍵字。
這個關鍵字是用來告訴編譯器,這是一個類,所以我只會通過指標來引用它。

#import <Foundation/Foundation.h>
@class Hand;
@class Foot;
@interface Person : NSObject
{

    NSString *name;
    NSString *sex;
    NSString *age;
    Hand *hands[2];
    Foot *foots[2];

}
-(void)setName:(NSString*) name;
-(void)setSex:(NSString*) sex;
-(void)setAge:(NSString*) age;
-(void)print;
-(void)desc;
@end複製程式碼

@class對於迴圈引用也很有好處,例如A依賴B,B也依賴A,這時如果使用import就會報錯,但是使用@class就不會。
對於非指標引用的其他類就不能使用@class。例如我們建立一個Student類,繼承Person類,這時在Student中就必須#import Person.h。
對比程式碼效果更好一些,我將程式碼放在了github上:
github.com/mymdeep/OC_…
更多的開發知識,可以關注我的公眾號:

Objective-C檔案組織介紹(附程式碼)

相關文章