Objective-C カテゴリ

カテゴリ機能を用いると
クラスを複数のファイルに分割し、機能毎に整理する事が可能です。
また、分割元には特殊な記述は必要無いので、既存のクラスを拡張する事も出来ます。
(NSObjectなどを拡張することも可能)

・カテゴリでは、メンバ変数を宣言することはできません。
・カテゴリの関数の実装内では、普通にメンバ変数を使うことができます。
・基底クラスをカテゴリを用いて拡張した場合、
 派生クラスから追加したメソッドが見えるようになります。
・カテゴリの実装ファイルがリンクされているかなどのチェックはされず、
 リンクされていないファイルに定義されている関数を呼びだそうとした場合
 プログラムは強制終了されます。

カテゴリの宣言

@interface クラス名 ( カテゴリ名 )
    メソッドの宣言;
        ...    
@end

カテゴリの実装

@implementation クラス名 ( カテゴリ名 )
    メソッドの定義;
        ...    
@end

 
classAのmethodBをB カテゴリとして分離、
もしくはclassAを拡張してmethodBを追加

//クラス本体
@interface classA :NSObject
{
    ....
}
    - (void ) methodA;
@end

@implementation classA
   -( void ) methodA { ... }
@end
//カテゴリ
@interface classA ( B )

    - (void ) methodB;

@end

@implementation classA ( B )
   -( void ) methodB { ... }
@end

 
・カテゴリの宣言時にカテゴリ名を空白にすると、
 対応するメソッドがクラス本体にの実装部で定義されていないと
 コンパイルエラーが発生するようになります。(クラスエクステンション)

クラスエクステンション

//クラス本体の宣言
@interface classA :NSObject
{
    ....
}
    - (void ) methodA;
@end

//クラスエクステンションの宣言
@interface classA (  )
    - (void ) methodB;
@end
//クラス本体の宣言
@implementation classA
    -( void ) methodA { ... }

    -( void ) methodB { ... } //クラスエクステンション
@end
広告

akatukisiden について

フリーランスプログラマ 使用言語はC++,C#とそのつなぎのC++/CLI 専門はクライアントアプリ開発
カテゴリー: iOS, Objective-C パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中