2011-08-05 105 views
0

当我分析我的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:我的所有谟正常工作在iPhone模拟器 它是一个应用程序,用的TabBar和4段,两段都是空的, 和其他两个部分是tableview中的细节视图(数据从拍摄plist) 当我在我的设备上测试应用程序时,两个空白部分完美地工作,并且正确的两个tableview中的一个显示detailview,第二个tableview巫婆在模拟器中工作没有推动detailview, 让我发疯的是它今天上午工作正常

一个问题: 是一个plist受它所包含的数据的限制,我的意思是,如果有一个大的例子与500字典它的例子EMS,这可能会麻烦的应用程序的良好显示?

感谢

回答

3

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

I.e.重命名你的功能CreatePathWithRoundRect(),分析仪应该停止抱怨。

请注意,您不希望与CG/CF类型混淆autorelease;也就是说,遵循由包含返回对象类型的框架延续的模式。因此,从该函数返回+1保留计数对象是有道理的。

+0

非常感谢我会尝试 – a3116b

0

关于潜在的泄漏:

似乎分析仪解释你NewPathWIth....方法作为便捷构造;这样的构造函数按照约定返回autorelease的对象。所以我想,哟删除分析仪警告你应该做的:

return [path autorelease]; 

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

至于plist问题,我认为plist没有限制。问题在于你如何处理它。如果您创建的表格视图有500行,那很重要,但是由于表格视图针对单元格的管理方式进行了优化,所以应该没问题。无论如何,需要更多的信息(可能这是问S.O.的第二个问题)。

+1

几乎正确的分析,但不完全正确的解决方案。 – bbum

+0

@sergio感谢您的旅游帮助,我也会试试 – a3116b