我目前正在构建一个生成图像的应用程序,并将它们存储在NSMutableArray中,然后在UINavigation(Cell.imageView.image)中使用。我需要能够处理多达2000个图像,而不会导致我的应用程序滞后。
目前我如何设置此生成是通过在访问cellForRowAtIndexPath
时调用生成方法。在调用下一个导航之前,这似乎会造成4-5秒的延迟。
在iProducts的世界中等待4-5秒并不是一个真正的选择。我想知道我在后台生成这些图像的选项是什么。我尝试使用线程[self performSelectorInBackground:@selector(presetSnapshots) withObject:nil]
;
但由于某种原因,这只给了我关于载体的问题。
继承生成代码:
-(void)presetSnapshots{
//NSAutoreleasePool* autoReleasePool = [[NSAutoreleasePool alloc] init];
for (int i = 0; i < [selectedPresets count]; ++i){
GraphInfo* graphInfo = [selectedPresets objectAtIndex:i];
graphInfo.snapshot = [avc takePictureOfGraphInfo:graphInfo PreserveCurrentGraph:false];
[graphInfo.snapshot retain];
}
//[autoReleasePool drain];
presetSnapshotFinished = YES;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
内的是
if (presetSnapshotFinished == NO){
[self presetSnapshots];
//[self performSelectorInBackground:@selector(presetSnapshots) withObject:nil];
}
cell.imageView.image = [[selectedPresets objectAtIndex:indexPath.row] snapshot];
修改
我也不愿意为此使用coreData。图像是23x23,大约7kb。所以它的大约6MB用于内存中的任何给定时间。
答案 0 :(得分:1)
您可以使用Grand Central Dispatch(GCD)启动[self presetSnapshots]
dispatch_queue_t working_queue = dispatch_queue_create("com.yourcompany.image_processing", NULL);
dispatch_queue_t high = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,NULL);
dispatch_set_target_queue(working_queue,high);
dispatch_queue_t main_queue = dispatch_get_main_queue();
dispatch_async(working_queue,^{
if (presetSnapshotFinished == NO){
[self presetSnapshots];
}
dispatch_async(main_queue,^{
cell.imageView.image = [[selectedPresets objectAtIndex:indexPath.row] snapshot];
});
});