为什么这是一个结束
在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
对象(并替换全局链接)时释放该对象。
上一篇: Why is this an over
下一篇: CEP Engine for .NET