0

我正在尝试为仅使用整数的 NSMutableArray 子类创建一个函数,但我不想使用“计数”。我该怎么做呢?

-(NSMutableArrayWithIntegers*)initWithCount:(NSInteger)count numbers:(NSInteger)firstInt, ...
{
    self = [super init];

    if (self) {
        va_list args;
        va_start(args, firstInt);
        NSInteger arg = firstInt;
        for (int i = 0; i < count; i++)
        {
            arg = va_arg(args, NSInteger);
            [self addObject: [NSNumber numberWithInteger:arg]];
        }
        va_end(args);
    }

    return self;
}
4

2 回答 2

2

我知道这不能回答你的问题,但让你知道很重要。永远不要子类化NSMutableAnything。使用类别并稍后感谢我:

@interface NSMutableArray (ListOfIntegers)

+(NSMutableArray)mutableArrayWithIntegers:(NSInteger)i, ... {
   NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:whatever];
   // do your thing
   return array;
}

@end
于 2013-04-03T14:05:55.717 回答
0

首先,您目前使用的方法很好。不要试图摆脱计数。有其他选择,但它们只会更糟。

例如,您可以使用标记值(可能未插入到数组中)作为最后一个参数,但在这种情况下,您必须确保您实际上根本没有尝试将该值插入到数组中:

- (id)initWithIntegers:(NSInteger)first, ...
{
    if (!(self = [super init])) return nil;

    va_list args;
    va_start(args, first);
    NSInteger n;
    if (first != NSIntegerMax) {
        [self addObject:@(first)];
        while ((n = va_arg(args, NSInteger)) != NSIntegerMax) {
            [self addObject:@(n)];
        }
    }

    va_end(args);

    return self;
}

但实际上,这不必要地缩小了可以添加的值的范围 - 使用该count参数并不是什么大问题。

于 2013-04-03T13:52:07.670 回答