objective-cにおけるクラスメソッドの拡張:カテゴリ、および非公式プロトコル(10)


holydancerオリジナル、転載する必要がある場合は、顕要位置に明記してください.
holydancerのCSDNコラムから、原文アドレス:http://blog.csdn.net/holydancer/article/details/7364900
パッケージはオブジェクト向けの特徴で、OCも意外ではありませんが、ある時、私たちはこのような状況に遭遇します.例えば、私はクラスをパッケージして、もうそれを動かしたくありませんが、プログラム機能の増加に伴い、そのクラスに小さな方法を追加する必要があります.このとき、私たちはそのクラスで修正する必要はありません.そのメソッドを使用するときに、そのクラスのカテゴリ(category)を勝手に追加するだけでいいです.コードを見てみましょう.まず空のクラスMenを作成し、そこには属性や方法がありません.main.mには次のように書きます.
#import <Foundation/Foundation.h>
#import "Men.h"
@interface Men(menAdd)//       menAdd,  Men    。
-(void)speak;
@end
@implementation Men(menAdd)
-(void)speak
{
    NSLog(@"       speak  ");
}
@end
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        Men *man =[[Men alloc]init];
        [man speak];
        
    }
    return 0;
}

2012-03-17 20:05:5.485 category 1[353:403]カテゴリ補完speakメソッドです
簡単に見えるでしょう.簡単な文法規則を覚えるだけでいいです.また、speakメソッドがmenクラス自体にある場合、カテゴリのspeakメソッドはmenのspeakメソッドを上書きし、書き換えのようなもので、カテゴリにメソッドを追加するしかなく、属性変数を追加することはできません.また、カテゴリのこの特性を利用して、実現することができます.このような効果は、クラス内のメソッド宣言をカテゴリ形式で書くことができます.これにより、異なる.m実装ファイルでこれらのカテゴリ宣言方法を実装することができ、1つのクラスの実装を複数の.mファイルに書くことができ、管理が容易になります.
最後に、カテゴリには非公式プロトコルと呼ばれる方法もあります.(OCには正式プロトコルと非正式プロトコルがありますが、次回は正式プロトコルを紹介します)では、NSObjectクラスのカテゴリを作成することができます.基本的にはすべての一般的なクラスがNSObjectクラスから継承されているため、どのクラスでもこのカテゴリを実装する方法を使用することができます.プロトコルに似ているので、非正式と呼ばれ、OCのプロトコルはJAVAのインタフェースのような存在です.を選択します.上記のコードを簡単に変更すると、この非公式プロトコルの使い方が簡単で実用的であることがわかります.
#import <Foundation/Foundation.h>
#import "Men.h"
@interface NSObject(menAdd)//       menAdd,  Men    。
-(void)speak;
@end
@implementation NSObject(menAdd)
-(void)speak
{
    NSLog(@"  NSObject        speak  ");
}
@end
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        NSString *str=[[NSString alloc]init];
        [str speak];
        
    }
    return 0;
}

2012-03-17 20:21:06.425 category 1[381:403]NSObjectクラスでカテゴリで実装されたspeakメソッドです
これにより、NSObjectカテゴリを作成することで、文字列オブジェクトの中で実装されているspeakメソッドを呼び出すことができます.使いやすくて使いやすいです.では、次回は正式なプロトコルについて説明します.
キーワード:objective-c,objective c,oc,カテゴリ,非公式プロトコル,category