nsarray有很多对象

时间:2013-04-02 04:08:55

标签: ios objective-c xcode

我是新人。求助,如何缩短:

effects = [[NSArray alloc] initWithObjects:@"Back1.jpg", @"Back2.jpg", @"Back3.jpg", @"Back4.jpg", @"Back5.jpg", @"Back6.jpg", @"Back7.jpg", @"Back8.jpg",@"Back9.jpg",nil];

感谢。我想要像@“back%i.jpg”,int i ++

这样的东西

3 个答案:

答案 0 :(得分:8)

也许你想要这样的东西:

NSMutableArray * effects = [[NSMutableArray alloc] init];
if(effects)
{
   for( NSInteger index = 0; index < 10; index++)
   {
      [effects addObject: [NSString stringWithFormat: @"Back%i.jpg", index];
   }
}

答案 1 :(得分:1)

你熟悉for循环吗?

int whatever = 100;
NSMutableArray * effectsTmp = [NSMutableArray new];
for (int i = 0; i < whatever; i++) {
     [effects addObject:[NSString stringWithFormat:@"Back%i.jpg", i]];
}
NSArray * effects = effectsTmp;

答案 2 :(得分:0)

根据您需要的数组大小,您可以利用NSArray非常简单的子类化。您只需覆盖两个方法countobjectAtIndex:

@interface StringArray : NSArray
@end

@implementation StringArray

-(NSUInteger)count {
    return 9;
}

-(id)objectAtIndex:(NSUInteger)index {
    return [NSString stringWithFormat:@"Back%ld.jpg", (long)(index +1)];
}

@end

要使用它,只需实例化它:

NSArray *stringArray = [[StringArray alloc] init];
NSLog(@"Array: %@", stringArray);

与通过for循环构建数组相比,此解决方案使用了一些额外的代码行,但从好的方面来说,它应该为大型数组使用更少的内存。

像这样的数组在某些情况下可用作数组控制器的模型对象。

我不知道它如何能够阻止代码审查,有些人可能会发现硬编码的大小和格式字符串可能需要一些工作。