【发布时间】:2015-03-06 22:37:37
【问题描述】:
一段时间以来,我一直在为一个内存泄漏的大型项目而努力。我已经设法创建了一个非常基本的 CLI 应用程序来复制问题。
为什么没有发布CG Image?
真正的应用程序实际上会创建一堆不同大小的拇指。这个只是演示只是一遍又一遍地使用相同的大小。
这是在没有 ARC 的情况下编译的。
#import <Foundation/Foundation.h>
#import <Cocoa/Cocoa.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSString * image = @"/Users/sean/Pictures/wallpaper/7gjMT.jpg";
NSData * imageData = [NSData dataWithContentsOfFile:image];
CFDataRef imgData = (CFDataRef)imageData;
CGImageRef imgRef;
CGDataProviderRef imgDataProvider = NULL;
imgDataProvider = CGDataProviderCreateWithCFData(imgData);
imgRef = CGImageCreateWithJPEGDataProvider(imgDataProvider, NULL, true, kCGRenderingIntentDefault);
CGDataProviderRelease(imgDataProvider);
for (int i = 0; i < 50; i++) {
// create context, keeping original image properties
CGColorSpaceRef colorspace = CGImageGetColorSpace(imgRef);
CGContextRef context = CGBitmapContextCreate(NULL, 2560, 1440,
CGImageGetBitsPerComponent(imgRef),
CGImageGetBytesPerRow(imgRef),
colorspace,
kCGImageAlphaPremultipliedFirst);
CGColorSpaceRelease(colorspace);
// draw image to context (resizing it)
CGContextDrawImage(context, CGRectMake(0, 0, 2560, 1440), imgRef);
// extract resulting image from context
CGImageRef newImgRef = CGBitmapContextCreateImage(context);
CGImageRelease(imgRef);
imgRef = newImgRef;
}
}
return 0;
}
【问题讨论】:
标签: objective-c xcode macos core-graphics