用 Objective-C 編程:定義一個類

##定義類編程

當你爲OSX或者iOS編寫軟件的時候,大部分時間是花在對象上的。OC語言的對象和其餘面向對象編程語言的對象概念類似:都是包裝了相關
行爲的數據。框架

構建一個App,是構建一個生態系統,系統中的對象互相通訊,以解決特定的問題,好比展現一個可視界面,對用戶輸入做出反饋,或者存
儲信息。對於iOS開發,你不須要從頭開始造輪子來解決問題,有一大波現成的對象以供使用,Cocoa Touch框架提供。編程語言

這些對象中,有一些立等可用,好比基本的數據類型,字符串,數字,或者用戶界面元素,按鈕,表格視圖等等。一些對象則須要你來用自
己的代碼定製,作出合適你所須要的行爲。在程序開發過程當中,包含了操做框架中的類,定製和組合這些類來賦予程序獨特的功能和特性。對象

在面向對象的術語中,一個對象就是一個類的一個實例。本節的內容就是看看如何在OC中定義一個類。首先須要的是聲明一個藉口,用來描
述你的類和這個類的實例如何被使用。這個接口包含了一個這個類能夠接受的消息的列表,因此在這個類裏面也須要提供類的實現,實現中
包含的是對應每個消息的可執行的代碼。繼承

###類是對象的藍圖接口

一個類描述的是任何特定類型的對象所共有的屬性和行爲。對於一個字符串對象(在OC中,這是NSString類的一個實例),這個類提供了很
多種凡是來對包裝的內部字符進行檢查和轉化操做。類似的,用來描述一個數字對象的類(NSNumber)提供的功能就是圍繞着一個內部的數
字值進行的,好比轉化成不一樣的數字類型的操做。開發

從同一個藍圖中構造出來的多個對象,從結構的角度來講是相同的,類的每個實例都擁有其餘全部類實例同樣的屬性的行爲。每個
NSString實例的行爲都是同樣的,只是各個實例中的內部字符串是不同的。字符串

任何特定的對象都有特定的用法。你可能知道一個字符串對象包裝了一些字符,可是你並不須要知道存儲字符的內部機制是什麼樣子。你不
須要知道對象內部是怎麼操做具體字符的,可是確實須要瞭解和對象交互的期待的反饋是什麼,或許是要求一個特定位置的字符,或者是返
回一個字符所有轉成大寫的新的對象。面向對象編程

在OC中,類接口定義了給定類型的對象如何被其餘對象使用。換句話說,類接口定義了類的實例與外部世界的公共接口。table

###可變性決定了一個被包裝的值可不能夠被改變

一些類是將對象定義成不可變的。意思就是在對象被建立的時候,內部的內容必須初始化完畢,在以後的過程當中不能夠被改變。在OC中,所
有基本的NSString和NSNumber對象都是不可變的。若是你須要表示一個不一樣的數字,那就須要一個新的NSNumber實例。

一些不可變的類也會提供一個可變的版本。若是須要在運行時改變字符串的值,好比在字符串後面追加內容,就可使用一個
NSMutableString類的對象實例,這個類的實例跟NSString同樣,除了他提供了更改對象表示的字符的功能。

雖然NSString和NSMutableString是不一樣的類,可是也有不少類似的地方。不是說,從細節開始徹底不一樣的兩個類,有了類似的行爲,而是
利用了繼承來實現的。

###從其餘的類繼承的類

在現實世界中,生物分類學用屬於種,屬,族來區分動物的種類。這些歌分類是有層次性的,好比多個種屬於一個屬,多個屬是一個族的。

大猩猩,人類,猩猩,他們之間有許多的類似性。雖然分屬於不一樣的族,甚至不一樣的屬,可是從生物分類學上來講,他們都是屬於一個科,
人科。

在面向對象的世界中,對象也是被分進層次結構的組織中。沒有使用特殊的術語來表示一層層的科,重,屬,僅僅是簡單地組織成了類。相
似的,人類做爲人科的一個成員繼承了特定的屬性,成爲人類,一個類能夠被設置成從父類繼承功能。

一個類從其餘的類繼承的時候,子類就會繼承父類的全部屬性和行爲。子類也能夠定義本身另外的行爲和屬性,或者覆蓋掉父類的方法。

好比OC的字符串類,NSMutableString的類描述就定義了這個類繼承自NSString類。全部NSString類提供的方法均可以在NSMutableString類
中訪問,好比查詢特定的字符或者請求新的大寫的字符串,可是NSMutableString增添了方法,能夠追加,插入,替換和刪除字符串和獨立
的字符。

###提供基礎功能的根類

就像全部的生物都都有一個生命屬性同樣,有一些功能是OC的全部類都擁有的。

當一個OC對象須要和另外一個類的OC對象一塊兒工做的時候,就會指望另外一個類能夠提供最最基本的特性和行爲。所以,OC定義了一個根類來給其餘的類來繼承,叫作NSObject類。當一個對象遇到另外一個對象,最最低的期待也能夠達到NSObject中所描述的行爲功能。

當你定義本身的類的時候,最起碼要繼承NSObject類,通常來講,你應該在框架裏面找一個功能最相近的類來繼承。

若是你作iOS開發,框架裏的UIButton已經沒法知足你的定製需求,想整一個本身定義的按鈕,繼承自UIButton類確定比繼承自NSObject類要好。若是簡單繼承NSObject,還要複製和諾複雜的視覺交互和通信功能的代碼,費了好大勁才能達到UIButton已經提供的功能。另外,要是繼承自UIButton的話,子類也會自動得到UIButton將來會得到的擴展和Bug修復,一舉多得。

相關文章
相關標籤/搜索