android攻城獅開發iOS .m和.h的區別
最近一直在忙,沒有繼續更Android攻城獅iOS開發,今天繼續更新。
Android 開發中我們用Java開發檔案的字尾都是.java 結束的,用kotlin開發字尾為.kt,但是ios中我們發現有它有.h和.m之分,下面我們來看一下他們的區別吧:
.h檔案
.m檔案
在.h檔案中
有一個import,這是用來匯入工具包,就是foundation框架 @這個標誌表示你使用的是object-c語言 @interface 是宣告類的關鍵字 People是類名 : 冒號表示繼承,oc中是單繼承模式 NSObject是父類 在@interface和@end之間是用來宣告屬性和方法的
.h中的@interface @end 這一對也可以寫在.m檔案的上方,就可以實現在.m檔案中宣告屬性
例如這樣
在.m檔案中宣告的屬性是無法被外界看到的,所以也成為私有屬性,而在.h中的屬性就是public屬性
在.m檔案中
#import ”People.h“ 用來匯入.h中宣告的屬性和變數
@implementation People implementation是實現類的關鍵字
@interface的{ }裡面和外面。在與標頭檔案對應的.m檔案中的使用是沒有什麼區別的,直接使用即可,主要區別在於外部呼叫。
寫在@interface的{ }裡面的變數只能在本類和子類(派生類)中使用,相當於C++中的保護型(protect)。
而寫在@interface的{ }外面的變數可以在任何類中使用,相當於C++中的公有型(public)。
方法的定義就相對簡單,帶有“-”號的方法只能在本類和子類(派生類)中使用,相當於C++中的保護型(protect)。
帶有“+”號的方法可以在任何類中使用,相當於C++中的公有型(public)。
但是,IOS對於開發者使用公有型(public)變數和方法做了十分謹慎的限定,公有型的變數有@property屬性進行引用計數和記憶體限制(這個以後再講)。而帶有“+”號的公有型方法還有static的屬性,可以直接使用類名進行呼叫。
C++中的私有型(private)與保護型和公有型的變數(方法)區別在於無法被外部呼叫,因此IOS做了個巧妙的方法加以區別,將私有型變數(方法)放入.m檔案中定義。
在.m檔案的開始處有一個@interface定義,寫在{ }裡面的變數就是本類的私有型(private)變數。在{ }外面是不能再定義變數只能定義方法,這裡定義的方法也是私有型的。