小编xiu*_*ius的帖子

内存警告和崩溃(ARC) - 如何识别它发生的原因?

我最近开始使用ARC,从那时起我就把它归咎于每一个内存问题.:)也许,你可以帮助我更好地理解我做错了什么.

我目前的项目是关于CoreGraphics的很多 - 图表绘图,填充缩略图的视图等等.我相信在使用手动内存管理时没有任何问题,除了可能是一些僵尸......但截至目前,每当我尝试创建大量缩略图或重绘更复杂的图表时,应用程序就会崩溃.

在使用Instruments进行分析时,我可以看到驻留内存和脏内存中的非常高的值.堆分析表明相当惊人的不规则增长...

只绘制几个缩略图时,常驻内存增长约200 MB.绘制完所有内容后,内存将恢复与绘制前几乎相同的值.但是,有很多缩略图,驻留内存中的值高于400 MB,这显然会导致应用程序崩溃.我试图限制同时绘制的缩略图数量(NSOperationQueue及其maxConcurrentOperationCount),但由于释放这么多内存似乎需要花费更多时间,所以它并没有真正解决问题.

现在我的应用程序基本上不起作用,因为真实的数据适用于许多复杂的图表=很多缩略图.

每个缩略图都是用我从这里得到的代码创建的:( UIImage上的类别)

+ (void)beginImageContextWithSize:(CGSize)size
{
    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
        if ([[UIScreen mainScreen] scale] == 2.0) {
            UIGraphicsBeginImageContextWithOptions(size, YES, 2.0);
        } else {
            UIGraphicsBeginImageContext(size);
        }
    } else {
        UIGraphicsBeginImageContext(size);
    }
}

+ (void)endImageContext
{
    UIGraphicsEndImageContext();
}

+ (UIImage*)imageFromView:(UIView*)view
{
    [self beginImageContextWithSize:[view bounds].size];
    BOOL hidden = [view isHidden];
    [view setHidden:NO];
    [[view layer] renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    [self endImageContext];
    [view setHidden:hidden];
    return image;
}

+ (UIImage*)imageFromView:(UIView*)view scaledToSize:(CGSize)newSize
{
    UIImage *image …
Run Code Online (Sandbox Code Playgroud)

core-graphics objective-c ios automatic-ref-counting

15
推荐指数
1
解决办法
1万
查看次数