核心图与弧的内存消耗问题

时间:2013-01-03 15:00:55

标签: iphone objective-c ios ios6 core-plot

我正在构建一个启用了ARC的图形相关应用程序,其中图表上有两个不同的视图: - 一个是小视图,我必须在点击按钮时更改(使用重新加载数据)。 - 第二个视图是一个较大的视图,当点击“1天”,“3天”,“5天”等按钮时图形会发生变化。

我面临的问题是,在连续使用15-20分钟后,应用程序会被日志崩溃....“CAAnimation无法分配字节”。 当我在Profile上分析时,我知道当小图加载实时字节跳跃2-3 mb时,当大图加载实时字节跳跃4到5 mb和实时字节然后永远不会降低。 我在离开视图时填充了所有图形对象,但即使这样,也不会释放内存。

切换到下一个图表我正在调用此方法:

-(void)removePlot
{
    for(CPTPlot* plot in [graph allPlots])
    {
        plot.dataSource = nil;
        plot.delegate = nil;
        [plot deleteDataInIndexRange:NSMakeRange(0, plot.cachedDataCount)];
        [graph removePlot:plot];
    }
}

在离开视图时我称这种方法为:

-(void)removeGraph
{
    [axisSet removeFromSuperlayer]; 
    axisSet=nil;
    [self removePlot];
    generationPlot=nil;
    [graph removePlotSpace:plotSpace];
    plotSpace=nil;
    [graph removeFromSuperlayer];
    graph=nil;
    [hostView removeFromSuperview];
    hostView=nil;
    headerList=nil;
    graphDetailList=nil;
    graphList=nil;
    dataList=nil;
    plotsArray=nil;
}

许多人早些时候遇到过这个问题,但没有答案对我有用。 如果有人对此有任何想法......请帮助。

1 个答案:

答案 0 :(得分:0)

尝试阅读本文,可能会有所帮助。

https://developer.apple.com/library/ios/releasenotes/objectivec/rn-transitioningtoarc/introduction/introduction.html

另外,请考虑查看ARC提供的@autoreleasepool机制,以帮助限制最大内存占用。

另外,请确保调用上面列出的方法。有时我们会编写清理程序,但它们不会被调用! : - )

此外,您将代码列为:

axisSet =零 generationPlot =零 ...等等...

什么类型的轴集?是什么类型的generationPlot?全局变量?如果他们不是NSObject(有时即使他们是),将它们设置为nil可能不是解除分配它们的正确方法。

考虑将它们中的一些设为@property并给它们适当的限定符(即:strong等),然后你的一些内存使用可能会更清晰一些。如果你有许多静态或全局变量可能会造成一些混乱。

希望这有帮助。