为什么这是CTFrame的过度释放

Mar*_*rra 7 objective-c core-text

在iOS上使用一些CoreText代码,我很困惑为什么这是CTFrame的过度发布.我已经确认它是一个过度释放但我感到困惑,因为它是用一种create方法创建的.

for (NSValue *value in [self frameArray]) {
  CGRect column = [value CGRectValue];
  CGMutablePathRef path = CGPathCreateMutable();
  CGPathAddRect(path, NULL, column);
  CTFrameRef frame = CTFramesetterCreateFrame(bodyFramesetter, CFRangeMake(position, 0), path, NULL);
  CTFrameDraw(frame, context);
  position += CTFrameGetVisibleStringRange(frame).length;
  CGPathRelease(path);
  // ???: Why does this cause an overrelease?
  //CFRelease(frame);
}
Run Code Online (Sandbox Code Playgroud)

更新

代码库是3.2,并且第一个版本不会发生崩溃.在绘制视图时,它会在某个时刻"随机"出现.这个循环,你可能猜到的是在-drawRect:视图中.此应用程序中没有多线程.

Mar*_*rra 3

事实证明 Jason 是在正确的轨道上,问题是向函数传递一个空的框架设置器CTFramesetterCreateFrame,然后返回 NULL。