2013-04-03 241 views
0

我想为仅使用整数的NSMutableArray子类创建一个函数,但我不想使用“count”。我该怎么做呢?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; 
} 
+0

你是什么意思“不想使用'count'”? – trojanfoe

+0

@trojanfoe我猜他想要使用可变参数,但不需要指定计数作为参数之一 –

+10

对于所有圣洁的爱,请不要继承NSMutableArray – QED

回答

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参数不是什么大不了的事。

2

我知道这并不回答你的问题,但重要的是让你知道。永远不要继承NSMutableAnything。使用一个类别,稍后再感谢我:

@interface NSMutableArray (ListOfIntegers) 

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

@end 
+0

我不怀疑你的观点有什么优点,但是如果你能解释*为什么NSMutableArray是不受欢迎的? –

+3

http://stackoverflow.com/a/3873129/1224741 – QED