-3

可能重复:
Objective-C 中函数名前的“+”和“-”之间的区别

Objective-C 中的“+className”是什么意思?+className 是类方法名。非常感谢。

4

2 回答 2

2

在您引用的类集群文档中, +className...只是可用于创建类集群实例的各种类方法的占位符,例如numberWithChar, numberWithInt... for NSNumber

-className这与 的实例方法无关NSObject

于 2013-02-03T09:57:24.280 回答
-2

文档

真正的子类:一个示例 假设您要创建一个NSArray名为 MonthArray 的子类,它返回给定其索引位置的月份的名称。但是,MonthArray 对象实际上不会将月份名称数组存储为实例变量。相反,返回给定索引位置 ( objectAtIndex:) 的名称的方法将返回常量字符串。因此,无论应用程序中存在多少个 MonthArray 对象,都只会分配十二个字符串对象。

MonthArray 类声明为:

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

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

@end

请注意,MonthArray 类没有声明init...方法,因为它没有要初始化的实例变量。和方法简单地覆盖了继承的原始方法countobjectAtIndex:如上所述。

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:, sortedArrayUsingSelector:,objectEnumerator和其他方法对 MonthArray 对象没有问题。

于 2013-02-03T09:28:03.540 回答