内存问题:分配对象的潜在泄漏

时间:2011-08-05 16:29:59

标签: ios memory-leaks xcode4

当我分析我的projetc时,Xcode分析器会发现分配对象的潜在泄漏 但麻烦的是我不知道这意味着什么,以及如何解决这个问题

这是我的文件的图片,

enter image description here

这是代码

#import "RoundRect.h"

//
// NewPathWithRoundRect
//
// Creates a CGPathRect with a round rect of the given radius.
//
CGPathRef NewPathWithRoundRect(CGRect rect, CGFloat cornerRadius)
{
    //
    // Create the boundary path
    //
    CGMutablePathRef path = CGPathCreateMutable();
    CGPathMoveToPoint(path, NULL,
        rect.origin.x,
        rect.origin.y + rect.size.height - cornerRadius);

    // Top left corner
    CGPathAddArcToPoint(path, NULL,
        rect.origin.x,
        rect.origin.y,
        rect.origin.x + rect.size.width,
        rect.origin.y,
        cornerRadius);

    // Top right corner
    CGPathAddArcToPoint(path, NULL,
        rect.origin.x + rect.size.width,
        rect.origin.y,
        rect.origin.x + rect.size.width,
        rect.origin.y + rect.size.height,
        cornerRadius);

    // Bottom right corner
    CGPathAddArcToPoint(path, NULL,
        rect.origin.x + rect.size.width,
        rect.origin.y + rect.size.height,
        rect.origin.x,
        rect.origin.y + rect.size.height,
        cornerRadius);

    // Bottom left corner
    CGPathAddArcToPoint(path, NULL,
        rect.origin.x,
        rect.origin.y + rect.size.height,
        rect.origin.x,
        rect.origin.y,
        cornerRadius);

    // Close the path at the rounded rect
    CGPathCloseSubpath(path);

    return path;

}

感谢您提供非常有用的帮助。

PS:我的所有projet在iphone模拟器中都能正常工作 它是一个应用程序,有一个标签栏和4个部分,两个部分是空的, 另外两个部分是带有详细视图的tableview(从plist中选取数据) 当我在我的设备上测试应用程序时,两个空白部分完美地工作,并且两个tableview中的一个显示详细视图,第二个tableview女巫在模拟器中工作没有推动详细视图, 令我生气的是它今天早上工作正常

一个问题: 是一个限制它包含的数据的plist,我的意思是,如果有一个大的列表,例如500个字典项,这会不会很好地显示应用程序?

由于

2 个答案:

答案 0 :(得分:3)

返回CF / CG分配时,该函数应以Create为前缀。

即。重命名您的函数CreatePathWithRoundRect(),分析器应该停止抱怨。

请注意,您不希望与CG / CF类型串联自动释放;也就是说,遵循包含返回对象类型的框架所延续的模式。因此,从该函数返回+1保留计数对象是有意义的。

答案 1 :(得分:0)

关于潜在的泄漏:

分析器似乎正在将您的NewPathWIth....方法解释为便利构造函数;按惯例,这样的构造函数返回autorelease个对象。所以我想你可以删除你应该做的分析器警告:

 return [path autorelease];

对于你如何使用该返回值是否正常,我不知道......我的意思是:如果你像现在一样返回对象,你不需要被叫保留它;如果你将它自动释放,那么被调用者可能需要保留它,如果它需要的时间比当前执行方法更长。

关于plist问题,我认为plist没有限制。问题是你用它做什么。如果要创建一个包含500行的表视图,那就太多了,但由于表视图已针对单元格的管理方式进行了优化,因此应该没有问题。在任何情况下,都需要更多的信息(这可能是第二个询问S.O的问题。)