Я перешел к следующему коду, который после задержки вызовет CFRelease.Я включил его в метод для контекста.
CGPathRef NewPathWithRoundRect(CGRect rect, CGFloat cornerRadius)
{
// other work to create ref which is a CGPath
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5 * NSEC_PER_SEC), dispatch_get_current_queue(), ^{
CFRelease(ref);
});
}
В последней версии XCode я получаю предупреждение о неправильном освобождении памяти.Вызывающая сторона принимает значение, использует его и затем вызывает CFRelease.Я теперь CFRetain это, а также CFRelease это так, чтобы уменьшить количество ссылок до нуля, я устанавливаю эту диспетчеризацию для запуска и очистки ссылки.
Мне не нравится этот подход.Есть ли лучший шаблон для возврата объектов CF, которые были созданы в методе и должны быть возвращены?Должен ли я создать путь вне метода и передать его в качестве параметра, чтобы он был создан и выпущен вызывающей стороной?
Я также изменил свой код для вызова CGPathRelease, что немного безопаснее.Любые предложения приветствуются.