我使用分配工具检查了我的应用程序,我发现这里的代码导致了分配问题。该方法返回填充了传递的属性字符串的平方区域的建议高度;我需要这个来计算绘制该文本然后生成书页需要多少空间:
- (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的内存分配..我认为释放帧设置器就足够了,我错了吗?
答案 0 :(得分:0)
我对此问题进行了一些详细的调试WRT,您可以在我对this question的回答中找到结果。你可以尝试一些事情。 1,你是应用程序在辅助线程中进行这些分配,如果是,那么将它们移动到主线程会使丢失的内存消失吗?二,你可以坚持使用CTFramesetterRef,然后使用相同的框架集反复调用CTFramesetterSuggestFrameSizeWithConstraints。泄漏似乎在CTFramesetterCreateWithAttributedString()调用中,所以也许你可以通过不多次调用该方法来最小化泄漏。