Работа с некоторым CoreText кодирует на iOS, и я смущен относительно того, почему это - сверхвыпуск CTFrame. Я подтвердил, что это - сверхвыпуск, но я экранирован, потому что это создается с a 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:
из представления. В этом приложении нет никакой многопоточности.
Оказывается, Джейсон был на правильном пути и проблема заключалась в передаче пустого установщика фреймов функции CTFramesetterCreateFrame
, которая затем вернула NULL.