如何将大量对象添加到数组中

时间:2012-05-14 00:31:52

标签: objective-c ios

我正在使用以下代码将许多图像加载到数组中,但想知道如何更有效地执行此操作。例如,我怎样才能有效地将100个图像加载到数组中?

hopAnimation=[[NSArray alloc] initWithObjects:
              [UIImage imageNamed:@"frame-1.png"],
              [UIImage imageNamed:@"frame-2.png"],
              [UIImage imageNamed:@"frame-3.png"],
              [UIImage imageNamed:@"frame-4.png"],
              [UIImage imageNamed:@"frame-5.png"],
              [UIImage imageNamed:@"frame-6.png"],
              [UIImage imageNamed:@"frame-7.png"],
              [UIImage imageNamed:@"frame-8.png"],
              [UIImage imageNamed:@"frame-9.png"],
              [UIImage imageNamed:@"frame-10.png"],
.
.
.
               [UIImage imageNamed:@"frame-100.png"],
              nil
              ];

有没有办法使用for循环有效地执行此操作?

4 个答案:

答案 0 :(得分:2)

假设您的命名约定与此类似,您可以使用可变数组并在循环中添加项目:

NSMutableArray *hopAnimation = [[NSMutableArray alloc] initWithCapacity:100];

for (int i = 1, i <= 100, i++) {
   [hopAnimation addObject:[UIImage imageNamed:[NSString stringWithFormat:@"frame-%i.png", i]]];
}

答案 1 :(得分:1)

你可以使用for循环。您可能希望将所有图像名称放入plist。然后,您可以创建名称数组:

NSArray * imageNames = [NSArray arrayWithContentsOfFile:@"/path/to/names.plist"];

并循环遍历它以创建图像数组:

NSMutableArray * images = [NSMutableArray array];
for( NSString * imageName in imageNames ){
    [images addObject:[UIImage imageNamed:imageName]];
}

或者,如果您的图像文件确实是这样命名的,那么您可以循环一个整数并将其放入文件名字符串中:

NSMutableArray * images = [NSMutableArray array]; 
for( int i = 1; i <= numImageFiles; i++ ){
    [images addObject:[UIImage imageNamed:[NSString stringWithFormat:@"frame-%d.png", i]]];
}

答案 2 :(得分:0)

其他人建议用循环填充数组。您声明的目标是效率,如果有任何循环效率低于您当前加载阵列的方式。如果要清理代码,请务必使用循环。但是,如果您正在寻找效率,则无法填充比您当前使用的方法更高效的数组。

答案 3 :(得分:0)

如果使用Clang 3.1(可能与Xcode 4.4一起使用)或更高版本,您可以使用新的数组文字语法:

@[
    [UIImage imageNamed:@"frame-1.png"],
    [UIImage imageNamed:@"frame-2.png"],
    [UIImage imageNamed:@"frame-3.png"],
    /* ... */
]

我没有找到任何关于是否使用-initWithObjects:之类的循环实现的信息,或任何其他性能考虑因素。