【发布时间】:2015-09-15 07:59:22
【问题描述】:
以下问题的附录。
我们已将分配内存的增长跟踪到指向 UIImage 列表的 NSMutableArray。 NSMutable 数组在一个方法中。它没有指向它的外部指针,无论强弱。因为 NSMutableArray 在一个方法中 - 不应该 - 并且它指向的所有对象都会在方法返回后的某个时刻自动取消分配?
我们如何确保发生这种情况?
==================
(1) 首先,调用此代码会导致内存泄漏还是我们应该寻找其他地方?
(在我们看来,这段代码确实会泄漏,因为当我们查看 Apple 的 Instruments 时,运行这段代码似乎会从 CVPixelBuffer 创建一个 1.19MB 的 malloc 字符串 - 跳过代码可以避免这种情况。此外,malloc 分配大小不断在整个执行周期中爬升,似乎永远不会被回收。添加@autorelease 池可以减少峰值内存使用,并有助于延长应用程序的崩溃时间——但基线内存使用量稳步增加,其中最大的罪魁祸首是这些 1.19MB 的 malloc。) image2 是现有的 UIImage。
image2 = [self imageByDrawingCircleOnImage:image2 withX:newX withY:newY withColor:color];
- (UIImage *)imageByDrawingCircleOnImage:(UIImage *)image withX:(int)x withY:(int)y withColor:(UIColor *)color
{
UIGraphicsBeginImageContext(image.size);
[image drawAtPoint:CGPointZero];
CGContextRef ctx = UIGraphicsGetCurrentContext();
[color setStroke];
CGRect shape = CGRectMake(x-10, y-10, 20, 20);
shape = CGRectInset(shape, 0, 0);
CGContextStrokeEllipseInRect(ctx, shape);
UIImage *retImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return retImage;
}
(2) 其次,如果这段代码确实泄漏了,那么我们如何防止泄漏,更重要的是,当我们快速连续多次调用该方法时,如何防止由于内存不足而导致的崩溃?我们注意到内存使用量激增,因为我们多次调用此方法会导致崩溃。问题是我们如何确保快速释放丢弃的 UIImages,以便应用在多次调用此方法时不会因内存不足而崩溃。
【问题讨论】:
-
由于此代码不会泄漏,您可能需要查看其他地方,即您在处理图像做什么?
-
@Eiko 你是对的。我们在其他地方发现了泄漏。在下面回答。
标签: ios memory-leaks uiimage