##類名必須獨一無二框架
在一個程序中,類名必須是獨一無二的,固然這包括了使用的類庫和框架這些範圍。若是說建立的新類和原有的類名稱衝突了,就會報一個
編譯錯誤。函數
所以在定義類的時候在名字前面加上兩到三個字母做爲前綴。這些字母的含義可能跟你在寫的程序有關,或者是框架的名稱的重用代碼,或
者僅僅是你名字的縮寫。操作系統
文檔中接下來的全部類名都會加上前綴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」,由於沒有這個類方法的實現。