Object-C中的動態特性(Category類別)

原文地址:http://ningandjiao.iteye.com/blog/1892359


在Object-C中,提供了一種動態擴展類的方式——Category,它可以動態的爲已存在的類添加新的方法,有點類似於Ruby的打開類技術,不同的是Category必須爲擴展創建一個新類,新類的名稱一般約定爲“原類名稱+擴展名”。有了這個技術之後,開發者在寫代碼時就可以從把原始的類設計得非常小,然後在功能增加時再逐步擴展,另外,可以很容易的把新添加的行爲模塊化。 

Category的實現和使用方式非常簡單,比方說,在寫UI的時候,想使用自己的字體類型和字體大小,這個時候就可以嘗試使用Category擴展UIFont支持自己想用的字體和字體大小。首先創建一個Category新類,(UIFont+SnapAdditions.h) 

Object-c代碼  收藏代碼
  1. #import <UIKit/UIKit.h>  
  2. @interface UIFont (SnapAdditions)  
  3.   
  4. +(id)xnl_snapFontWithSize:(CGFloat)size;  
  5.   
  6. @end  

Object-c代碼  收藏代碼
  1. #import "UIFont+SnapAdditions.h"  
  2.   
  3. @implementation UIFont (SnapAdditions)  
  4.   
  5. +(id)xnl_snapFontWithSize:(CGFloat)size  
  6. {  
  7.     return [UIFont fontWithName:@"Action Man" size:size];  
  8. }  
  9. @end  

創建好之後,在想使用該方法的類中引入Category類,然後像使用UIFont自身的方法一樣使用新的方法就行了。 
Object-c代碼  收藏代碼
  1. #import "UIFont+SnapAdditions.h"  
  2. …  
  3. self.statusLabel.font = [UIFont xnl_snapFontWithSize:16.0f];  
  4. ...  

應用場景: 
  • 想爲已有類(自己創建的或者SDK類庫)擴展新的方法。
  • 多個團隊協作時,需要對同一個類進行修改,可以有效隔離相互影響。

注意事項: 
  • 新創建的Category類不能擁有自己的變量,需要自己的變量可通過繼承實現。
  • 新創建的Category類會覆蓋同名的原類的方法,因此給新方法命名的時候最後特殊一點,避免覆蓋原類方法,導致不可預知的錯誤。
  • 新創建的Category類雖然也有“.h”和“.m”文件,但是實現類並不需要實現所有的接口方法,只要不去調用方法就不會有問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章