1

Xcode で iOS プロジェクトに取り組んでいますが、「+」が付いた名前のクラスがいくつかあります。例: TableViewController+TableView.hそして、クラスの名前は:@interface RKTableViewController (TableView)ではなく:RKTableViewController+TableViewです。

これ+とは何(TableView)ですか? そのサブクラス化UITableViewでは、クラスを次のように宣言しないでください: Subclassed name : Parent class nameformat?

4

2 に答える 2

5

ファイル名の + は意味的に重要ではありません。ファイルに「ClassName+CategoryName.h/m」という名前を付けるのは、カテゴリを含むファイルに名前を付けるための一般的な規則です。

@interface RKTableViewController (TableView)
@end

クラスで「TableView」というカテゴリを宣言しますRKTableViewController。カテゴリは、メインの実装以外のクラスにメソッドを追加するために使用されます。カテゴリに関する Apple のドキュメントを参照してください: http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/chapters/occategories.html

于 2012-06-05T15:44:02.850 に答える
4

これらはカテゴリです。時々非常に役立ちます。

クラスにメソッドを追加するには、メソッドをインターフェース ファイルでカテゴリ名で宣言し、実装ファイルで同じ名前で定義します。カテゴリ名は、メソッドが新しいクラスではなく、別の場所で宣言されたクラスへの追加であることを示しています。ただし、カテゴリを使用してインスタンス変数をクラスに追加することはできません。

カテゴリが追加するメソッドは、クラス タイプの一部になります。たとえば、カテゴリ内の NSArray クラスに追加されたメソッドは、コンパイラが NSArray インスタンスがそのレパートリーに持つことを期待するメソッドとして含まれます。ただし、サブクラスの NSArray クラスに追加されたメソッドは、NSArray タイプには含まれません。(静的型付けはコンパイラがオブジェクトのクラスを知ることができる唯一の方法であるため、これは静的に型付けされたオブジェクトの場合にのみ重要です。)

カテゴリ メソッドは、適切なクラスで定義されたメソッドが実行できることは何でも実行できます。実行時には違いはありません。カテゴリがクラスに追加するメソッドは、他のメソッドと同様に、クラスのすべてのサブクラスに継承されます。

http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/chapters/occategories.html

例:

これは、私がいつも使用しているカテゴリの例です。私は NSMutableArray を所有していませんが、単純な移動機能があればいいのにと思います。単純な関数を追加するためだけにサブクラス化する代わりに、カテゴリを追加します。

// NSMutableArray+Move.h

@interface NSMutableArray (move)

- (void)moveObjectFromIndex:(NSUInteger)from toIndex:(NSUInteger)to;

@end

// NSMutableArray+Move.m

@implementation NSMutableArray (move)

- (void)moveObjectFromIndex:(NSUInteger)from toIndex:(NSUInteger)to
{
    if (to != from) {
        id obj = [self objectAtIndex:from];
        [self removeObjectAtIndex:from];
        if (to >= [self count]) {
            [self addObject:obj];
        } else {
            [self insertObject:obj atIndex:to];
        }
    }
}

これにより、アプリ全体で既に作成されているクラスで新しいことを行うことができます。NSMutableArray を使用する場所ならどこでも、追加したメソッドを次のように呼び出すことができます

NSMutableArray *myArray = [NSMutableArray arrayWithObjects:@"Object A", @"Object B", @"Object C", nil];

[myArray moveObjectFromIndex:0 toIndex:2];
于 2012-06-05T15:43:24.467 に答える