Objective-C 中的“+className”是什么意思?+className 是类方法名。非常感谢。
2 回答
在您引用的类集群文档中, +className...只是可用于创建类集群实例的各种类方法的占位符,例如numberWithChar
, numberWithInt
... for NSNumber
。
-className
这与 的实例方法无关NSObject
。
从文档:
真正的子类:一个示例 假设您要创建一个
NSArray
名为 MonthArray 的子类,它返回给定其索引位置的月份的名称。但是,MonthArray 对象实际上不会将月份名称数组存储为实例变量。相反,返回给定索引位置 (objectAtIndex:
) 的名称的方法将返回常量字符串。因此,无论应用程序中存在多少个 MonthArray 对象,都只会分配十二个字符串对象。MonthArray 类声明为:
#import <foundation/foundation.h>
@interface MonthArray : NSArray
+ (id)monthArray;
- (unsigned)count;
- (id)objectAtIndex:(unsigned)index;
@end
请注意,MonthArray 类没有声明
init...
方法,因为它没有要初始化的实例变量。和方法简单地覆盖了继承的原始方法count
,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:
,sortedArrayUsingSelector:
,objectEnumerator
和其他方法对 MonthArray 对象没有问题。