2012-05-14 70 views
-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-loop來有效地做到這一點?

+0

是什麼讓你認爲你所做的事情效率不夠高? –

回答

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

假設你的命名規則是這樣的一致,你可以使用一個可變的數組,在一個循環中添加項目:

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

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

其他人建議用循環填充數組。你說的目標是效率,如果有什麼循環會降低你當前加載陣列的效率。如果你想清理你的代碼,那麼一定要用循環。但是,如果您正在尋找效率,則無法填充您當前使用的方法的效率更高的陣列。

+0

'initWithObjects:'內部也存在一個循環,用於處理'va_list'中的項目。 –

0

如果使用鏘3.1或更高版本(這可能會在Xcode 4.4到達),你可以使用新的數組文本語法:

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

我還沒有找到這是否是一個循環實現的任何信息像-initWithObjects:或其他任何性能考慮。

+0

這在Xcode 4.3中不可用,因爲該編譯器還沒有這些功能。然而,未來的版本將支持他們。 –

+0

糟糕。我的錯。 – echristopherson