今年都要結束了,努力發一點iOS的心得吧。
Cluster class是一種簡化有許多共通方法的子類的做法。舉例來說,int和float和double直觀上是差不多的東西,操作起來的概念是一樣的,但他們個別的儲存方法是不同的。如果每個都去寫一遍,那只是浪費時間,所以透過製作一個抽象的父類,將共通的方法寫在裡面,然後再檢查傳入的參數類別以決定回傳的物件類別(factory pattern)。
製作cluster class的子類需要注意三件事情(或是四件):
何謂主要的方法?主要的方法是類別介面的基本。比方說NSArray要儲存數個資料物件,每個物件都有index,透過index去訪問該物件。所以NSArray的主要方法為count和objectAtIndex:。這些主要方法有了之後,其他的方法—衍生方法(derived method)—就可以實作了。在NSArray裡面的衍生方法有lastObject:和containsObject:。當繼承的主要方法都覆寫好後,衍生方法就可以正常操作了。
在子類中的初始方法也需要處理。像是init…和+className方法。主要是看你選擇的init…或+className方法去決定要實例化的子類別為何。抽象superclass是沒有實例的所以它不需要初始化方法,之所以會宣告可以說是為了子類別。子類別應該要宣告它自己的init…方法甚或是+className方法。不管有沒有繼承,都應該要合理的實作所有superclass的初始化方法(就算你不需要甚麼特別的要求,也要至少呼叫一下super的方法),以維持初始器鏈的連結(就是sub→super這樣的呼叫)。
Cluster class是一種簡化有許多共通方法的子類的做法。舉例來說,int和float和double直觀上是差不多的東西,操作起來的概念是一樣的,但他們個別的儲存方法是不同的。如果每個都去寫一遍,那只是浪費時間,所以透過製作一個抽象的父類,將共通的方法寫在裡面,然後再檢查傳入的參數類別以決定回傳的物件類別(factory pattern)。
製作cluster class的子類需要注意三件事情(或是四件):
- 繼承該cluster class的superclass
- 宣告專屬的儲存方法
- 覆寫主要的方法(包括初始化方法,所以是四件)
何謂主要的方法?主要的方法是類別介面的基本。比方說NSArray要儲存數個資料物件,每個物件都有index,透過index去訪問該物件。所以NSArray的主要方法為count和objectAtIndex:。這些主要方法有了之後,其他的方法—衍生方法(derived method)—就可以實作了。在NSArray裡面的衍生方法有lastObject:和containsObject:。當繼承的主要方法都覆寫好後,衍生方法就可以正常操作了。
在子類中的初始方法也需要處理。像是init…和+className方法。主要是看你選擇的init…或+className方法去決定要實例化的子類別為何。抽象superclass是沒有實例的所以它不需要初始化方法,之所以會宣告可以說是為了子類別。子類別應該要宣告它自己的init…方法甚或是+className方法。不管有沒有繼承,都應該要合理的實作所有superclass的初始化方法(就算你不需要甚麼特別的要求,也要至少呼叫一下super的方法),以維持初始器鏈的連結(就是sub→super這樣的呼叫)。
留言
張貼留言