核心文本内存分配问题

我用分配工具检查了我的应用程序,发现这个代码在这里给我一个分配问题。 该方法返回填充了通过的属性string的平方区域的build议高度; 我需要这个来计算需要多less空间来绘制文本然后生成书页:

- (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 ; } 

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

我对这个问题做了一些详细的WRTdebugging,可以在我对这个问题的答案中find结果。 有几件事你可以尝试。 1,你是否可以在辅助线程中执行这些分配,如果是,那么将它们移动到主线程中会使失去的内存消失? 二,你可以坚持到CTFramesetterRef,然后调用CTFramesetterSuggestFrameSizeWithConstraints一遍又一遍的相同的framesetter。 泄漏似乎是在CTFramesetterCreateWithAttributedString()调用,所以也许你可以通过多次调用该方法来最小化泄漏。