-1

我正在使用以下代码将许多图像加载到数组中,但想知道如何更有效地执行此操作。例如,如何有效地将 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

4 回答 4

2

假设您的命名约定是这样一致的,您可以使用可变数组并在循环中添加项目:

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

for (int i = 1, i <= 100, i++) {
   [hopAnimation addObject:[UIImage imageNamed:[NSString stringWithFormat:@"frame-%i.png", i]]];
}
于 2012-05-14T00:36:14.487 回答
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]]];
}
于 2012-05-14T00:37:20.920 回答
0

其他人建议用循环填充您的数组。您的既定目标是效率,如果有任何循环效率低于您当前加载数组的方式。如果你想清理你的代码,那么一定要使用循环。但是,如果您正在寻找效率,则无法填充比您当前使用的方法更有效的数组。

于 2012-05-14T00:58:16.733 回答
0

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

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

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

于 2012-05-14T04:08:00.637 回答