2012年4月13日 星期五

飛天豬的category外掛




   小豬有沒有可能像彼得潘一樣翱翔於天際呢?
   只要發揮想像力,
   沒有什麼不可能的!
 
 
   接下來彼得潘將示範如何利用Objective-C獨門的category,
   施加魔法,
   讓Pig物件具有飛翔的能力。
   (感謝藝術家朋友Jorinde Jankowski (張友鷦)提供可愛的飛天豬)

1. 新增category


2. 設定category的名稱以及外掛作用的類別
   
    如下圖所示,
    Category填入Fly,Category on填入Pig,
    到時候category Fly將讓小豬比人類先一步長出翅膀。



    新產生的category檔案包含.h和.m
    檔名Pig+Fly其實正是外掛作用類別和category名稱的結合。




3. 定義category
    定義category的語法其實和定義類別雷同,
    只不過category名稱必須加在類別名稱後的 ( ) 裡。


 
 有一點值得注意的,
  category只能擴充原有物件的能力,
  因此其只能增添新method,
  並不能增加instance variable。
  比方Pig原本沒有hair,
  我們無法利用category讓其多了hair attribute。

4. 測試


為什麼不用繼承?



如果我們定義繼承自Pig的FlyPig類別,
不是也能實現飛天豬嗎?
category的最大好處在於它擴充的是原有物件的能力,
因此只要是Pig物件,
即可飛翔。
但如果採用繼承,
只有FlyPig可以飛翔。
尤其如果是內建的類別,
我們更可以體會category的美妙。
比方我們想讓NSString物件具有顛倒字串的能力,
此時我們只要創建作用於NSString上的Reverse category,
再定義reverseString method
即可讓所有的NSString物件皆具有顛倒是非,
哦,說錯了,
顛倒字串的能力。


Core Data的應用
我們也常利用category擴充NSManagedObject subclass的能力。
因為如果我們直接將新能力定義於NSManagedObject subclass,
每當我們修改表格欄位,
重新產生檔案時,
原來辛苦填寫的新method將消失無蹤







沒有留言:

張貼留言