建立在C語言之上,可以混編C/C++代碼,編寫一個類需要二個檔案:
.h的頭檔案
.m的實作檔案(如果是C/C++混編檔案,檔案字尾為.mm)
既然有頭檔案,是以很多人會拿它與C++進行類比,它最重要的三個特性是:Message、Category、Protocol,與C++類比,二者之間的不同:
1、它沒有new也沒有delete,但有類似的方法alloc、dealloc;
2、不支援多繼承,隻支援單繼承,但是提供了Protocol;
3、它沒有命名空間;
4、不支援内聯函數;
5、不支援參數預設值;
C++太過龐大,是以拿二者比較其實不是特别合适,跟Java相比,我覺得可能更适合一些吧
1) 類的定義
.h頭檔案
.m實作檔案
通常我們定義一個類,都會讓它繼承自NSObject。有人會問NSObject後面的{}怎麼省略了,因為我沒有定義“實作變量”是以就把它省略了。
因為OC不提供命名空間,是以類命名上要特别注意了,不然很容易覆寫/沖突而導緻很多未知的問題。蘋果定義的類,一般類名最前面有二個字母,比如NSObject中的NS,UIKit中的UI,是以為了避免跟蘋果定義的類産生沖突,自定義的類以三個字母開頭,比如BNR這樣
2) 方法的定義和調用
方法分二種:執行個體方法、類方法,如上圖所示,差別類方法和執行個體方法,主要是它的聲明符:-、+
+ (傳回值類型) 類方法名
- (傳回值類型) 執行個體方法名,需要先建立後再使用,比如這樣:[[[Hello alloc] init] methodName];
無論是哪種方法,調用都是使用中括号“[]”,方法的準确來講應該稱為發消息,它有三個要素:
receiver(消息接收方)
selector(選擇器,通常指方法名)
arguments(實參)
通常類中調用自身的方法,用[self xx],self是一個隐式的局部變量,不需要聲明self,程式自動會為self指派,把它當作JavaScript中的this就好了解了。
OC中預設所有的方法都是公開的,是以如果你想定義一個私有方法,不需要在.h中聲明方法,直接在.m中定義方法就好,但是建議使用p_開頭,這樣避免與蘋果中定義的一些私有方法名産生沖突。
3) 基本資料類型
OC建立在C語言之上,是以C中的所有基本資料類型它都支援,比如:int、float、char…
OC自身定義的資料類型,都包含在Foundation中了,類名以NS開頭,比如:NSArray、NSInteger、NSNumber,定義:NSString *myStr;