我正在尝试为仅使用整数的NSMutableArray子类创建一个函数,但我不想使用“count”。我该怎么做?
-(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;
}
答案 0 :(得分:2)
我知道这不能回答你的问题,但重要的是要让你知道。不要继承NSMutableAnything
。使用类别,谢谢我:
@interface NSMutableArray (ListOfIntegers)
+(NSMutableArray)mutableArrayWithIntegers:(NSInteger)i, ... {
NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:whatever];
// do your thing
return array;
}
@end
答案 1 :(得分:0)
首先,你现在拥有的方法很好。不要试图摆脱计数。有其他选择,但它们只会更糟。
例如,您可以使用sentinel值(可能不会插入到数组中)作为最后一个参数,但在这种情况下,您必须确保实际上并未尝试将此值插入到数组:
- (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
参数并不是什么大问题。