如何在使用CGImageDestinationFinalize时避免malloc

我试图以编程方式在iOS中创buildGIF,使用下面的堆栈的问题:

通过iOS创build和导出animationgif?

我的代码如下所示:

// File Parameters const void *keys[] = { kCGImagePropertyGIFLoopCount }; const void *values[] = { (CFNumberRef) 0 }; CFDictionaryRef params = CFDictionaryCreate(NULL, keys, values, 1, NULL, NULL); const void *keys2[] = { kCGImagePropertyGIFDictionary }; const void *values2[] = { (CFDictionaryRef) params }; CFDictionaryRef fileProperties = CFDictionaryCreate(NULL, keys2 , values2, 1, NULL, NULL); // URL to the documents directory NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:nil]; NSURL *fileURL = [documentsDirectoryURL URLByAppendingPathComponent:fileName]; // Object that writes GIF to the specified URL CGImageDestinationRef destination = CGImageDestinationCreateWithURL((__bridge CFURLRef)fileURL, kUTTypeGIF, [arrayOfAllFrames count], NULL); CGImageDestinationSetProperties(destination, fileProperties); for (NSUInteger i = 0; i < [arrayOfAllFrames count]; i++) { @autoreleasepool { float delayTime = [[gifFramesDuration objectAtIndex:i] floatValue]; NSDictionary *frameProperties = @{ (__bridge id)kCGImagePropertyGIFDictionary: @{ (__bridge id)kCGImagePropertyGIFDelayTime: [NSNumber numberWithFloat:delayTime] // a float (not double!) in seconds, rounded to centiseconds in the GIF data } }; UIImage *myImage = [arrayOfAllFrames objectAtIndex:i]; CGImageDestinationAddImage(destination, myImage.CGImage, (__bridge CFDictionaryRef)frameProperties); } } if (!CGImageDestinationFinalize(destination)) { NSLog(@"failed to finalize image destination"); } CFRelease(destination); CFRelease(fileProperties); CFRelease(params); 

但是,一旦我尝试向GIF文件添加大约240帧,debugging器将调用CGImageDestinationFinalize后引发以下错误:

 (923,0xb0115000) malloc: *** error for object 0xd1e7204: incorrect checksum for freed object - object was probably modified after being freed. 

你可以请我提供一些解决方法,或与如何避免mallocbuild议?

首先,试着用Instruments来debugging你的应用程序。 您可能会注意到问题是由以下方法引起的:Generatefromrgbimagewu

我一直在想,是不是原因是在我的线程实现,但事实certificate,一旦你有这样的错误,你应该把重点放在调整图像。

一旦图像被resize,上面发布的代码将会生成你自己的GIF。