[iPhone] Objective- Cの勉強メモ:カテゴリという概念を使って元クラスの拡張(メソッドの追加)できる
Objective-CにはASにはない機能でカテゴリという概念がある。
これはクラスファイルにメソッドを追加することができる機能。
通常クラスを拡張するにはそのクラスを継承したサブクラスを定義すればいいと思う。
でも根本的に弄りたくなった場合、元のクラスを書き換えちゃうということもできる。
(ASだと、Flash8でAS2のときは直接編集できたけど、AS3ではSWCになってるから無理ぽ)
でも書き換えちゃうと何か不具合がおきたときとかバックアップとってないと元に戻すのが大変。
というわけでカテゴリという概念は、元クラスを簡易的に拡張できるという概念。
ただし追加できるのはメソッドだけ。
変数は追加できない。
手順は拡張用のクラス(?)ファイルを作ってそこで定義する。
例)UIViewを拡張する、UIViewExファイルを生成する場合
//ヘッダーファイル
#import <UIKit/UIKit.h> //ここでの()の中の名前は任意(ファイル名と同じでなくてよい) @interface UIView (AnimationExtension) //メソッドの定義 //ここに追加したいメソッドを書く -(void) hoge; @end
//実行ファイル
#import "UIViewExtention.h" @implementation UIView(AnimationExtension) //メソッドの実装 //ここで定義したメソッドを実装する -(void) hoge{ //処理 } @end
書き方で注意するのは、ヘッダーファイルでのinterfaceのくだり。
変数は定義できないので、{}は書く必要なし。
これを反映されるには、反映させたいクラスファイルにて
#import "UIViewExtention.h"
を記述すればよい。
これが記述されたクラス内では、UIViewインスタンスにUIViewExで追加したメソッドが普通に使えるようになる。
//例
-(void) init{ //imageViewはUIImageVIewクラスのインスタンス //(UIImageViewのスーパークラスはUIImageなのでhogeメソッドが使える) [imageView hoge]; }
Tweet