현재 이미지를 생성하고 NSMutableArray에 저장하는 응용 프로그램을 작성 중입니다. 그러면 NSMutableArray가 UINavigation (Cell.imageView.image)에서 사용됩니다. 내 응용 프로그램에서 지연을 일으키는 일없이 최대 2000 개의 이미지를 처리 할 수 있어야합니다.백그라운드에서 이미지 생성
현재이 생성을 설정하는 방법은 cellForRowAtIndexPath
에 액세스 할 때 생성 방법을 호출하는 것입니다. 다음 네비게이션이 호출되기 전에 4-5 초의 지연이 발생할 것으로 보인다.
다행히도 4-5 초가 지나면 생성이 완료되고 아무런 문제가 없습니다.
세계에서 4-5 초 대기하는 iProducts는 실제로 옵션이 아닙니다. 내 옵션이 백그라운드에서 이러한 이미지를 생성하기위한 것인지 궁금합니다. 나는 스레드를 사용하여 시도했다 [self performSelectorInBackground:@selector(presetSnapshots) withObject:nil]
; 그러나 그것은 단지 어떤 이유로 든 벡터에 관한 문제를 내게주었습니다.
을 Heres를 생성하는 코드 : - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
내부
-(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;
}
가
if (presetSnapshotFinished == NO){
[self presetSnapshots];
//[self performSelectorInBackground:@selector(presetSnapshots) withObject:nil];
}
cell.imageView.image = [[selectedPresets objectAtIndex:indexPath.row] snapshot];
편집 :
나는 또한 오히려 이것에 대한 coreData을 사용하지 마십시오. 이미지는 23x23이고 약 7kb로 나옵니다. 따라서 약 6MB의 메모리가 주어진 시간에 사용됩니다.
을 해고 그랜드 센트럴 디스패치 (GCD)를 사용할 수 있습니다. 하지만 당신의 코드를 시도하고 stl_constuct.h에 BAD_ACCESS를 가져 왔습니다. 특히 107 줄 {__pointer-> ~ _Tp(); } 스택을 살펴보면, 나의 정리 방법에 관한 문제입니다. 나는 왜 GCD와 나의 정리가 상충되는지를 알아낼 것이다. –
나는 추측한다. 나는 아무런 문제없이 백그라운드 처리를 위해 대부분의 경우이 스 니펫을 사용하고있다. – dom