使用RGB方法在UICOLOR颜色中泄漏内存

时间:2010-08-16 07:55:30

标签: iphone memory memory-management memory-leaks uicolor

我必须对字符串进行标记并获取RGB值以制作UICOlor,下面是代码,

NSString* text = @"1.0,1.0,1.0";
NSArray *chunks = [text componentsSeparatedByString:@","];
return [UIColor colorWithRed:([[chunks objectAtIndex:0] floatValue]/256.0)
                       green:([[chunks objectAtIndex:1] floatValue]/256.0)
                        blue:([[chunks objectAtIndex:2] floatValue]/256.0)
                       alpha:1];

它向我显示返回UIColor对象的行的内存泄漏,希望有人会指出我在代码中所犯的错误。


我打破了代码,但它仍然在我初始化UIColor对象的行显示泄漏。

功能原型是,

+(UIColor*) GetUIColorFromText:(NSString*)text;

基本上我得到三个奇怪的内存泄漏,我不知道这三个是否相互关联。

     当我将我的视图控制器推到导航控制器时,我正在泄漏
    MyController *filter = [[MyController alloc] initWithNibName:@"MyController" bundle:nil];
                [self.navigationController pushViewController:filter animated:YES];
                [filter release] ;
    
    当我使用动画时,这个泄漏被删除了:NO,即
    MyController *filter = [[MyController alloc] initWithNibName:@"MyController" bundle:nil];
                [self.navigationController pushViewController:filter animated:NO];
                [filter release] ;
     2.我在问题中提到的泄漏。
  1. 下面的代码行也向我展示了仪器中的内存泄漏,我在IOS 3.12以及4上运行代码,但我一直在收到这三个泄漏,
  2. [MyBtn.titleLabel setFont:[UIFont boldSystemFontOfSize:12]];
    

2 个答案:

答案 0 :(得分:1)

查看iphone - UIColor leaking... need to release the object?

的已接受答案

它实际上并没有泄漏,很可能是误报。

答案 1 :(得分:0)

这段代码看起来非常好 - 我看不到任何杂散分配,因此警告可能不正确。可能值得分解代码以进一步本地化警告,例如:

NSString* text = @"1.0,1.0,1.0";
NSArray *chunks = [text componentsSeparatedByString:@","];
NSString *redStr = [chunks objectAtIndex:0];
float red = [redStr floatValue]/256.0;
NSString *greenStr = [chunks objectAtIndex:1];
float green = [greenStr floatValue]/256.0;
NSString* blueStr = [chunksObjectAtIndex:2];
float blue = [blueStr floatValue]/256.0;

UIColor* rgb = [UIColor colorWithRed:red green:green blue:blue alpha:1.0];

return rgb;

这至少应该确定报告问题的确切位置。但是,我几乎可以肯定这段代码中没有实际的泄漏。

其他一些想法:

这是代码的全部范围吗?据推测,从长远来看,你没有使用硬编码的@"1.0,1.0,1.0",附近还有其他可能导致问题的东西吗?

方法名称是什么?我在这里读到静态分析器在试图弄清楚语义是什么时会考虑NARC命名约定。我不知道这是多么真实,也不知道它会如何导致你的问题,但是这可能会导致错误的泄漏警告。

编辑:根据您的其他信息,我很茫然。所有这三个片段看起来都不错。你用什么来检测这些泄漏 - 静态分析还是运行时?如果是后者,你在模拟器或设备上运行吗?是否提供了其他信息?