用OC編程:類的實現

##類名必須獨一無二框架

在一個程序中,類名必須是獨一無二的,固然這包括了使用的類庫和框架這些範圍。若是說建立的新類和原有的類名稱衝突了,就會報一個
編譯錯誤。函數

所以在定義類的時候在名字前面加上兩到三個字母做爲前綴。這些字母的含義可能跟你在寫的程序有關,或者是框架的名稱的重用代碼,或
者僅僅是你名字的縮寫。操作系統


文檔中接下來的全部類名都會加上前綴code


@interface XYZPerson : NSObjectorm

@property (readonly) NSString *firstName;對象

@property (readonly) NSString *lastName;繼承

@end接口

 

歷史記錄:那麼爲何那麼多的類會用NS做爲前綴呢?這要追溯一下Cocoa和Cocoa Touch的歷史。Cocoa的誕生,是做爲NeXTStep操做系統
的應用程序集合框架來製造出來的。在1996年,Apple公司收購NeXTStep的時候,不少NeXTStep的東西都被引入了OSX當衆,包括現有的類名
稱。Cocoa Touch的地位就至關於iOS裏面的Cocoa;一些類在Cocoa和Cocoa Touch中均可以使用,還有不少的類是分別在兩個平臺獨有的。開發

相對來說,方法名和屬性名就僅僅須要在所定義的類中保持惟一性就好。雖然程序中的C函數須要一個惟一的名稱,可是對於多個OC類來講
,同名的方法是能夠接受的。你不能再同一個類聲明中屢次定義一個方法。想要覆蓋掉從父類繼承的方法,就必須使用一摸同樣的名字來聲
明方法。文檔

和方法名同樣,對象中的屬性和實例變量必須在類的範圍內惟一。若是使用的是全局變量,就要保證在整個項目範圍內名稱惟一。

#類的實現就是說一說它類的內部行爲

定義了類的接口以後,類的屬性和方法都做爲公共接口暴露了出來,你還須要寫代碼來實現這個類的行爲。

如前所述,類的接口一般是放在一個專用的文件中,即頭文件,文件的擴展名通常是.h。OC類的實現文件擴展名通常是點m。

在編譯源代碼文件的實現以前,首先要告訴編譯器讀取在頭文件中定義的接口。OC編譯器爲此專門提供了一個預編譯器指令,#import。看
上去很像是C語言的#include指令,可是#import指令能夠確保在編譯中這個文件僅僅會被包含一次。

請注意,預處理器的指令不一樣於傳統的C語言指令,它不須要用分號做爲結尾。

##類實現的基本語法

類實現的基本語法以下

#import "XYZPerson.h"

@implementation XYZPerson

@end

若是你在類接口中定義了任何方法,就須要在這個文件中實現方法。

###怎麼實現方法

下面是一個方法在接口中的簡單聲明:

@interface XYZPerson : NSObject

- (void)sayHello;

@end

這個方法的實現差很少是這樣子

#import "XYZPerson.h"

@implementation XYZPerson

- (void)sayHello {
NSLog(@"Hell, World!");
}

@end

樣例中的代碼使用了NSLog()函數,他會在控制檯上列印一個消息。很像是C語言裏面的printf()函數,接受必定數量的參數,第一個參
數是一個OC字符串對象。

方法的實現很相似C的函數定義,都是使用花括號來包含相關代碼。另外,方法的名稱必須和原型的名字是同樣的,參數和返回值也必須是
同樣的。

OC和C同樣是大小寫敏感的,因此sayhello方法和sayHello方法時徹底不一樣的方法。

通常來講,方法名應該是以小寫字母開頭。相較C語言函數來講,OC中的規範是使用一些更加具備描述性意義的名字。若是方法名包括了多
個單詞,就使用駝峯命名方法,增長可讀性。

- (void)satHello

{
NSLog("Hello, World!");
}

Xcode,Apple的集成開發環境(IDE),用來建立OSX和iOS軟件,Xcode會自動基於用戶自定義的配置選項來縮進代碼。

##OC類也是對象

在OC中,一個類自己也有一個隱晦的類型叫作Class。類不能夠有像以前實例中出現的用聲明語法聲明的屬性,可是卻可接受消息。

一個類方法的典型應用就是做爲一個工廠方法使用,這個工廠方法能夠用來分配和初始化動態建立的對象。好比NSString類,這個類有不少
工廠方法來建立空字符串等等,或者說用特定字符初始化字符串的工廠方法。

+ (id)string;

+ (id)stringWithString:(NSString *)aString;

+ (id)stringWithFormat:(NSString *)format, ...;

+ (id)stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncodeing)enc error:(NSError **)error;

+ (id)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc;

上面的例子中,類方法的標誌就是用一個+開頭,不一樣的是實例方法使用的是減號-開頭。

相似於實例方法的原型,類方法的原型也會包含在類接口中。類方法的實現方式和實例方法同樣,在@implementation代碼塊中實現類。

##練習

筆記:爲了完成本章最後的練習,你或許須要建立一個Xcode項目。這會確保你的代碼沒有編譯錯誤。

1. 使用Xcode新建文件模板窗口來建立接口和實現文件,類名叫作XYZPerson,街橙子NSObject類。

2. 在XYZPerson類接口中添加屬性,姓名還有生日(日期表示爲NSDate類)。

3. 聲明和實現sayHello方法。

4. 增長一個類工廠方法的聲明,叫作「person」。先不要實現,等到下一章再實現。

筆記:若是你編譯這個代碼,會獲得一個警告「Incomplete implementation」,由於沒有這個類方法的實現。

相關文章
相關標籤/搜索