頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


自作クラスに別ファイルでカテゴリ

自作クラスにカテゴリでメソッドを追加するファイルにヘッダーファイルはなくてもいいの?ってお話だよ。

Objective-Cですでにあるクラスにメソッドを追加するのにカテゴリってのがあるじゃない。なんでカテゴリって言うのかは謎だけど、簡単に追加できるから重宝するよね。
UIViewやNSStringクラスなどの自分で作ったクラスではないクラスに対してカテゴリでメソッドを追加、というのはしていたんだけど自作クラスでカテゴリを使いたくなったんだよ。これって今までやったことなかったんだよね。そりゃそうだよ。自分で書いてるクラスなんだからメソッドを追加したいのなら書き足せばいいじゃないってことになるもんね。

なんで自作クラスにカテゴリでメソッドを追加したいかというと、メソッドの数が膨大だからなんだ。2000ちょいあるんだよね、、、そう、日本語OCRで文字のデータを持たせるってのを想定してるんだよ。

アプリ起動時に文字データを扱うクラスで全部の文字データをメモリに割り当てるんだけど、performSelecter:withObject:で各メソッドを呼び出すんだ。
これならメソッド名は文字列で機械的に生成できるでしょ。switch文より簡潔になるし(そりゃそうだろう、switch文でcaseが2000種類もあるなんて、、、おえっ!)。

ところで、このカテゴリなんだけどイマイチ書き方がわからないんだよね。
例えばCharacterDataControllerってメインとなるクラスがあるとするよ。文字のデータを扱うクラスってイメージね。
アプリ起動時に文字データを準備するわけだ。このクラスはもちろん
CharacterDataController.h
CharacterDataController.m
って二つのファイルから構成されてるよね。
実装ファイル側(.m)で
NSString *selName = [NSString stringWithFormat:@"makeOneData_0x%x:",code];
SEL sel = NSSelectorFromString(selName);
[self performSelector:sel withObject:object];
こんな感じでメソッド名を指定して、その呼び出し先をカテゴリで別ファイルに置きたい訳だ。

ところがその別ファイルをどのように記述するのがいい方法なのかがよくわからないんだ。
とりあえず次のような記述はできるんだけど、、、?
CharacterDataController+0x3041.mってファイル名で基本構成はこんな感じ。
#import "CharacterDataController.h"
@implementation CharacterDataController(_0x3041)
-(void)makeOneData_0x3041:(id)object {
	//処理
}
@end
削れるところを削ってみたらメインのクラスをimportするだけで、ヘッダーファイルがなくても動くんだね、、、っていいのか???
処理速度が遅くなるのかなと心配したので調べてみたけど、ヘッダーファイルの有無が呼び出しの時間に影響を与えるようには思えなかったしなあ。

<< 面積平均法で画像を縮小してみる   TopPage  UITableViewでセルと右端のボタンの使い分け >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/644-3a91e891




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad