为什么这是一个结束

在iOS上使用一些CoreText代码,我很困惑为什么这是CTFrame的过度使用。 我已经确认这是一个过度释放,但我很困惑,因为它是用create方法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);
}

更新

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


结果发现Jason在正确的轨道上,并且问题是将一个空框架设置器传递给CTFramesetterCreateFrame函数,然后返回NULL。


这是因为你的drawRect:方法在运行结束时被调用。 这就是为什么你的应用程序随机崩溃。

所以你的解决方案是创建CTFrame对象的全局链接,并且只在dealloc以及创建其他CTFrame对象(并替换全局链接)时释放该对象。

链接地址: http://www.djcxy.com/p/2309.html

上一篇: Why is this an over

下一篇: CEP Engine for .NET