【发布时间】:2011-03-30 06:19:28
【问题描述】:
我有以下代码:
...
UIImage *image;
CGImageRef imageRef;
image = [[[UIImage alloc] initWithContentsOfFile: filePath] retain];
while (some_condition)
{
NSAutoreleasePool *pool = [[NSAutoReleasePool alloc] init];
imageCGDATA = CGDataProviderCreateWithCFData(cfdata);
imageRef = CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpace, bitmapInfo, imageCGDATA, NULL, NO, intent);
CGDataProviderRelease(imageCGDATA);
[image release];
image = [[[UIImage alloc] initWithCGImage: imageRef]] retain]; // LEAK HERE
CGImageRelease(imageRef);
[pool release];
}
...
当我运行代码并查看分配时,我看到总“实时字节”随着循环的每次迭代完成而增长,并且“CGImage”和“UIImage”实时分配的数量增长到非常大的数字(显然取决于循环的迭代次数)。
如果我注释用“LEAK HERE”注释的代码行(以及该代码行之前的版本)并重新运行应用程序,然后是“Live Bytes”、“CGImage”和“UIImage”的数量在循环的多次迭代中分配保持不变。
为什么该代码会泄漏?我错过了什么?
谢谢。
【问题讨论】:
标签: iphone objective-c