"누출"도구를 사용하여 표시되지 않는 대량의 메모리 누수가 발생합니다. 모달 뷰 컨트롤러를 팝업하고 4 개 또는 5 개의 이미지에 2 개의 CoreImage 필터를 적용합니다. 인스 트루먼 트를 사용하면 이러한 이미지가 생성 될 때 메모리가 약 40-50MB 정도 올라갈 수 있지만, 모달 뷰 컨트롤러를 닫은 후에도 절대로 메모리가 다시 돌아 오지 않으며이 프로세스를 2 ~ 3 번 반복하면 응용 프로그램이 중단됩니다 . 이것이 나를 미치게 만들었 기 때문에 당신이 제공 할 수있는 조언에 만족합니다. 나는 아래의 코드를 사용하여 imageWithData를 사용하여 imageNamed로 전환 한 사용자는ARC를 사용하여 신비한 CoreImage 메모리 누출
UIView *finalView = [[UIView alloc] initWithFrame:CGRectMake(1024, 0, 1792, 1345)];
UIImageView *templateImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 1792, 1345)];
templateImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@.png",[theme objectForKey:@"template_background"]]];
//CI background Setup
NSString *filePath5 = [[NSBundle mainBundle] pathForResource:[theme objectForKey:@"template_background"] ofType:@"png"];
NSURL *fileNameAndPath5 = [NSURL fileURLWithPath:filePath5];
@autoreleasepool {
finalBackBeginImage = [CIImage imageWithContentsOfURL:fileNameAndPath5];
finalBackImage = [CIFilter filterWithName:@"CIHueAdjust" keysAndValues:@"inputAngle", [NSNumber numberWithFloat:[[boothPrefs objectForKey:@"templateBackground_hue"] floatValue]*6.28], @"inputImage", finalBackBeginImage, nil].outputImage;
finalBackImage = [CIFilter filterWithName:@"CIColorControls" keysAndValues:@"inputSaturation", [NSNumber numberWithFloat:([[boothPrefs objectForKey:@"templateBackground_saturation"] floatValue] * 5)], @"inputImage", finalBackImage, nil].outputImage;
finalBackContent = [CIContext contextWithOptions:nil];
CGImageRef cgimgFinalBack =
[finalBackContent createCGImage:finalBackImage fromRect:[finalBackImage extent]];
UIImage *newFinalBackImg = [UIImage imageWithCGImage:cgimgFinalBack];
[templateImageView setImage:newFinalBackImg];
CGImageRelease(cgimgFinalBack);
}
[finalView addSubview:templateImageView];
참고로 수정되는 이미지의 일부는 1024 x 768 png이고 다른 몇 개는 1700 x 1300 일 수도 있습니다. 왜 이러한 필터를 처리하는 데 많은 메모리가 필요합니까? 왜 그것이 공개되지 않는지 이해하지 못합니다. –
다음번에이 함수를 호출하기 전에 templateImageView를 제거 하시겠습니까? –
아니요, 최종 이미지에 추가되는 각 이미지는 자신의 UIImageView입니다. templateImageView는 단순히 묶음의 첫 번째 것입니다. –