我不知道为什么这段简单的代码有时会导致内存泄漏(并非总是如此)。
这段代码被包装在一个 NSOperation 中并在一个 NSOperationQueue 队列中运行。该操作将修剪 sourceNSAString 以适应某个大小,并将其返回给其他线程。
//sourceNSAString is a NSMutableAttributedString that will be set to nil elsewhere in another GCD queue.
CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef) sourceNSAString);
if (frameSetter) {
CFRange fitRange = {static_cast<CFIndex>(range.location), 0};
CFRange totalRange = {static_cast<CFIndex>(range.location), static_cast<CFIndex>(range.length)};
CGSize suggestedSize = CTFramesetterSuggestFrameSizeWithConstraints(frameSetter, totalRange, NULL, size, &fitRange);
CFRelease(frameSetter);
...... trim sourceNSAString to fit in fitRange
}
是不是因为: 1,我不应该将 sourceNSAString 返回到另一个线程?或者2,CTFramesetterCreateWithAttributedString不能在后台线程中使用?
有任何想法吗?谢谢!