-1

我有内存泄漏问题,自 1 周以来我找不到答案。:(

我在我的照片数组中循环了 20 多个图像,我总是收到内存警告。

也许有人可以帮助我解决我令人沮丧的问题?

调试消息 “收到内存警告”。

在我的 UIView 中循环

images = [[NSMutableArray alloc] init];
for (Photo *photo in photos) {
    [images addObject:[[UIImage imageWithData:photo.image_compressed] ToSize:videoSize]];
}

ToSize 方法

    #import "UIImage+toSize.h"

    @implementation UIImage (toSize)

    - (UIImage *)ToSize:(CGSize)newSize {

        float originalWidth = self.size.width;
        float originalHeight = self.size.height;

        float newWidth = newSize.width;
        float newHeight = newSize.height;

        float xMargin = 0.0f;
        float yMargin = 0.0f;

        float ratioWidth = (originalWidth / originalHeight) * newSize.height;
        float ratioHeight = (originalHeight / originalWidth) * newSize.width;

        // LEFT & RIGHT Margin
        if (ratioHeight > newSize.height)
        {
            // set new image size
            newWidth = ratioWidth;
            newHeight = newSize.height;

            // calculate margin
            xMargin = (newSize.width - ratioWidth) / 2;
        } else if (ratioWidth > newSize.width)
        {
            // set new image size
            newWidth = newSize.width;
            newHeight = ratioHeight;

            // calculate margin
            yMargin = (newSize.height - ratioHeight) / 2;
        }

        CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
        CGContextRef ctx = CGBitmapContextCreate(NULL, newSize.width, newSize.height,
                                                 CGImageGetBitsPerComponent(self.CGImage), 0,
                                                 colorSpace,
                                                 CGImageGetBitmapInfo(self.CGImage));

        CGContextDrawImage(ctx, CGRectMake(xMargin, yMargin, newWidth, newHeight), self.CGImage);

        CGImageRef cgimg = CGBitmapContextCreateImage(ctx);

        UIImage *img = [UIImage imageWithCGImage:cgimg scale:self.scale orientation:UIImageOrientationUp];

        CGColorSpaceRelease(colorSpace);
        CGContextRelease(ctx);
        CGImageRelease(cgimg);

        return img;
    }

@end
4

1 回答 1

0

“收到内存警告。” 不是内存泄漏,那是操作系统告诉您它的内存不足,此时它调用与低内存相关的委托方法:

- (void)didReceiveMemoryWarning

为了让正在运行的应用程序有机会清除一些杂物,以便不必终止任何东西,如果没有足够的空间使应用程序开始被杀死。除非您可以在仪器中看到泄漏,否则我真的不认为这是内存泄漏。

于 2013-10-29T07:51:54.453 回答