【问题标题】:Memory Leaks when calling some CTFunctions in iPhone在 iPhone 中调用某些 CTFunction 时出现内存泄漏
【发布时间】:2013-06-22 16:54:00
【问题描述】:

我写了一个函数来计算一个矩形中的属性字符串的结束索引,

但似乎有些内存泄​​漏, 请帮我解决它。

CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attributtedString);

CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, NULL, rect);

CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(currentIndex, 0), path, NULL);

CFRange frameRange = CTFrameGetVisibleStringRange(frame);
endIndex += frameRange.length;

CFRelease(frame);
CFRelease(path);
CFRelease(framesetter);

提前致谢。

【问题讨论】:

  • 在设备上还是在模拟器上?如果在模拟器上,在真机上再次测试;模拟器有时会给出错误的读数。
  • @deanWombourne。我检查了模拟器和活动监视器,它显示实际内存正在增加。当我在设备中检查它时,过程结束,没有任何消息。
  • 那么我认为你的问题是它在设备上不起作用 - 稍后我会担心内存使用情况!
  • @deanWombourne。 ya 它在设备中不起作用。我的确切需要是创建一个 NSAttributtedString 看到这个stackoverflow.com/questions/6345780/…
  • @deanWombourne,我发现将它作为 IPA 放在设备上时效果很好。在设备调试时,它仍然显示内存泄漏并导致崩溃

标签: iphone cocoa-touch ipad core-graphics core-text


【解决方案1】:

上面的例子没有内存泄漏。据我们所见,您正在正确发布所有内容。

【讨论】:

    【解决方案2】:

    CGPathRef 对象有一个特殊版本。

    //CFRelease(path);
    CGPathRelease(path);
    

    【讨论】:

      【解决方案3】:

      我对设备进行了更多调查,CoreText 似乎确实存在泄漏,请参阅Memory usage grows with CTFontCreateWithName and CTFramesetterRef

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-25
        • 2012-02-13
        • 2010-11-23
        • 2011-12-10
        • 2011-05-24
        相关资源
        最近更新 更多