-3

重複の可能性:
Objective-C の関数名の前の「+」と「-」の違い

Objective-Cの「+className」はどういう意味ですか? +className はクラス メソッド名です。どうもありがとう。

4

2 に答える 2

2

参照しているクラス クラスターのドキュメントでは、+className...は、クラス クラスターのインスタンスを作成するために使用できるさまざまなクラス メソッドの単なるプレースホルダーです (例: numberWithCharnumberWithInt... for ) NSNumber

-classNameのインスタンスメソッドとは関係ありませんNSObject

于 2013-02-03T09:57:24.280 に答える
-2

ドキュメントから:

真のサブクラス:例NSArrayMonthArrayという名前のサブクラスを作成するとします。このサブクラスは、インデックス位置を指定して月の名前を返します。ただし、MonthArrayオブジェクトは、実際には月の名前の配列をインスタンス変数として格納しません。代わりに、インデックス位置()を指定して名前を返すメソッドは、objectAtIndex:定数文字列を返します。したがって、アプリケーションに存在するMonthArrayオブジェクトの数に関係なく、12個の文字列オブジェクトのみが割り当てられます。

MonthArrayクラスは次のように宣言されています。

#import <foundation/foundation.h>
@interface MonthArray : NSArray

+ (id)monthArray;
- (unsigned)count;
- (id)objectAtIndex:(unsigned)index;

@end

MonthArrayクラスにはinit...初期化するインスタンス変数がないため、メソッドを宣言しないことに注意してください。countandメソッドはobjectAtIndex:、上記のように、継承されたプリミティブメソッドをカバーするだけです。

MonthArrayクラスの実装は次のようになります。

#import "MonthArray.h"

@implementation MonthArray

static MonthArray *sharedMonthArray = nil;
static NSString *months[] = { @"January", @"February", @"March",
    @"April", @"May", @"June", @"July", @"August", @"September",
    @"October", @"November", @"December" };

+ (id)monthArray
{
    if (!sharedMonthArray) {
        sharedMonthArray = [[MonthArray alloc] init];
    }
    return sharedMonthArray;
}

- (unsigned)count
{
    return 12;
}

- (id)objectAtIndex:(unsigned)index
{
    if (index >= [self count])
        [NSException raise:NSRangeException format:@"***%s: index
            (%d) beyond bounds (%d)", sel_getName(_cmd), index,
            [self count] - 1];
    else
        return months[index];
 }

@end

MonthArrayは継承されたプリミティブメソッドをオーバーライドするため、継承する派生メソッドはオーバーライドされることなく適切に機能します。NSArraylastObject、、、、およびその他のメソッドはcontainsObject:、MonthArrayオブジェクトに対して問題なく機能します。sortedArrayUsingSelector:objectEnumerator

于 2013-02-03T09:28:03.540 に答える