0

尝试创建 CGSize 以设置 UILabel 的正确高度时出现泄漏。在 heightForRowAtIndexPath 中设置高度时,我也收到了同样的泄漏。

这是泄漏的代码片段:

CGSize size = [news.news sizeWithFont:[UIFont fontWithName:@"HelveticaNeue" size:12] constrainedToSize:CGSizeMake(230.0f, CGFLOAT_MAX) lineBreakMode:NSLineBreakByWordWrapping];

                UILabel *newsLabel = [[UILabel alloc] initWithFrame:CGRectMake(65, 50, 230, size.height)];
                newsLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:12];
                newsLabel.textAlignment = NSTextAlignmentLeft;
                newsLabel.text = news.news;
                newsLabel.numberOfLines = 0;
                newsLabel.lineBreakMode = NSLineBreakByWordWrapping;
                newsLabel.textColor = COLOR_DARK_GRAY;
                newsLabel.highlightedTextColor = COLOR_WHITE;
                newsLabel.backgroundColor = COLOR_CLEAR;
                [cell.contentView addSubview:newsLabel];
                [newsLabel release];

这是泄漏仪器中列出的泄漏:

泄漏对象:icu::UCharCharacterIterator 负责库:WebCore 负责框架:WebCore::LineBreakIteratorPool::take(WTF::AtomicString const&)

还有一个指向同一行的不同泄漏:

泄漏对象:icu::UCharCharacterIterator 负责库:WebCore 负责框架:WebCore::acquireLineBreakIterator(unsigned short const*, int, WTF::AtomicString const&)

如果还有什么我可以提供的,我很乐意这样做。我已经通过注释掉上面的单行(创建 CGSize 大小)来确认它是泄漏的行。发生在模拟器和设备上。

4

2 回答 2

1

在您的声明中newsLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:12];,您创建了一个UIFont要自动释放的对象。但是,如果您的代码在没有使用 明确设置自动释放池的线程中运行@autoreleasepool {},则该对象将永远不会被释放(因为不存在自动释放池),并且会泄漏。
因此,如果您的代码确实在单独的线程中运行,请检查您是否设置了自动释放池。

于 2013-02-03T20:15:19.657 回答
0

除非您有权访问WebCore代码,否则无需执行任何操作。你的代码对我来说看起来不错。Apple 的库中有许多小漏洞,您有时只需要接受这些漏洞并不会消失。

于 2013-02-03T20:13:09.050 回答