重複の可能性:
Objective-C の関数名の前の「+」と「-」の違い
Objective-Cの「+className」はどういう意味ですか? +className はクラス メソッド名です。どうもありがとう。
重複の可能性:
Objective-C の関数名の前の「+」と「-」の違い
Objective-Cの「+className」はどういう意味ですか? +className はクラス メソッド名です。どうもありがとう。
参照しているクラス クラスターのドキュメントでは、+className...は、クラス クラスターのインスタンスを作成するために使用できるさまざまなクラス メソッドの単なるプレースホルダーです (例: numberWithChar
、numberWithInt
... for ) NSNumber
。
-className
のインスタンスメソッドとは関係ありませんNSObject
。
ドキュメントから:
真のサブクラス:例
NSArray
MonthArrayという名前のサブクラスを作成するとします。このサブクラスは、インデックス位置を指定して月の名前を返します。ただし、MonthArrayオブジェクトは、実際には月の名前の配列をインスタンス変数として格納しません。代わりに、インデックス位置()を指定して名前を返すメソッドは、objectAtIndex:
定数文字列を返します。したがって、アプリケーションに存在するMonthArrayオブジェクトの数に関係なく、12個の文字列オブジェクトのみが割り当てられます。MonthArrayクラスは次のように宣言されています。
#import <foundation/foundation.h>
@interface MonthArray : NSArray
+ (id)monthArray;
- (unsigned)count;
- (id)objectAtIndex:(unsigned)index;
@end
MonthArrayクラスには
init...
初期化するインスタンス変数がないため、メソッドを宣言しないことに注意してください。count
andメソッドは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は継承されたプリミティブメソッドをオーバーライドするため、継承する派生メソッドはオーバーライドされることなく適切に機能します。
NSArray
のlastObject
、、、、およびその他のメソッドはcontainsObject:
、MonthArrayオブジェクトに対して問題なく機能します。sortedArrayUsingSelector:
objectEnumerator