【问题标题】:Memory leaks in UICOLOR color with RGB method使用 RGB 方法的 UICOLOR 颜色中的内存泄漏
【发布时间】:2011-03-30 07:39:22
【问题描述】:

我必须对字符串进行标记并获取一个 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;

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

    1. 当我将视图控制器推送到导航控制器时出现泄漏,即
    MyController *filter = [[MyController alloc] initWithNibName:@"MyController" bundle:nil];
                [self.navigationController pushViewController:过滤动画:YES];
                [过滤器释放];
    
    当我使用 animated:NO 时,此泄漏被删除,即
    MyController *filter = [[MyController alloc] initWithNibName:@"MyController" bundle:nil];
                [self.navigationController pushViewController:过滤动画:否];
                [过滤器释放] ;
    2. 我在问题中提到的泄漏。
  1. 下面的代码行还显示了仪器中的内存泄漏,我确实在 IOS 3.12 和 4 上运行了代码,但我一直遇到这三个泄漏,
[MyBtn.titleLabel setFont:[UIFont boldSystemFontOfSize:12]];

【问题讨论】:

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


    【解决方案1】:

    查看iphone - UIColor leaking... need to release the object?接受的答案

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

    【讨论】:

      【解决方案2】:

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

      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 命名约定。我不知道这是多么真实,也不知道它如何导致您的问题,但是这很可能会导致错误的泄漏警告。

      编辑:根据您的附加信息,我不知所措。这三个 sn-ps 在我看来都不错。您使用什么来检测这些泄漏 - 静态分析或运行时?如果是后者,您是在模拟器还是设备上运行?是否提供了其他信息?

      【讨论】:

      • 这三个泄漏我也完全不知所措,现在我已经在仪器上测试了这些泄漏,我期待在静态分析中测试这些泄漏。我正在设备上运行以测试所有这些泄漏。我想我应该就这些漏洞向苹果技术支持寻求帮助,因为所有这些漏洞看起来都很奇怪。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 2015-03-24
      • 1970-01-01
      • 2018-05-12
      相关资源
      最近更新 更多