核心文本内存分配问题

时间:2013-05-16 20:59:00

标签: iphone ios objective-c memory core-text

我使用分配工具检查了我的应用程序,我发现这里的代码导致了分配问题。该方法返回填充了传递的属性字符串的平方区域的建议高度;我需要这个来计算绘制该文本然后生成书页需要多少空间:

- (CGFloat)boundingHeightForWidth:(CGFloat)inWidth ForAttributedString:(NSAttributedString *)attributedString
{
     CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((__bridge CFMutableAttributedStringRef)attributedString);
     CGSize suggestedSize = CTFramesetterSuggestFrameSizeWithConstraints(framesetter, CFRangeMake(0, 0), NULL, CGSizeMake(inWidth, 10000), NULL);
     CFRelease(framesetter);
     return suggestedSize.height ;
}

由于我在流程中多次调用此方法,我想知道这是如何导致高达7MB的内存分配..我认为释放帧设置器就足够了,我错了吗?

1 个答案:

答案 0 :(得分:0)

我对此问题进行了一些详细的调试WRT,您可以在我对this question的回答中找到结果。你可以尝试一些事情。 1,你是应用程序在辅助线程中进行这些分配,如果是,那么将它们移动到主线程会使丢失的内存消失吗?二,你可以坚持使用CTFramesetterRef,然后使用相同的框架集反复调用CTFramesetterSuggestFrameSizeWithConstraints。泄漏似乎在CTFramesetterCreateWithAttributedString()调用中,所以也许你可以通过不多次调用该方法来最小化泄漏。