Удалите CATiledLayer из его суперслоя перед выпуском CGPDFDocumentRef.
[yourTiledLayer removeFromSuperlayer];
Не забудьте также установить его делегат на ноль.
yourTiledLayer.delegate = nil;
После этого вы можете безопасно выпуститьCGPDFDocumentRef.
Редактировать после того, как OP добавляет код:
Получили ли вы pdfPage, используя CGPDFDocumentGetPage()
?Если это так, вы не должны выпускать его, это объект с автоматическим освобождением.
Относительно того, как добавить его в качестве подслоя: вам на самом деле не нужен TiledPDFView.В вашем контроллере представления вы можете просто сделать это:
CATiledLayer *tiledLayer = [CATiledLayer layer];
tiledLayer.delegate = self; //sets where tiledLayer will look for drawLayer:inContext:
tiledLayer.tileSize = CGSizeMake(512.0f, 512.0f);
tiledLayer.levelsOfDetail = 4;
tiledLayer.levelsOfDetailBias = 4;
tiledLayer.frame = CGRectIntegral(CGRectMake(0.0f, 0.0f, 512.0f, 512.0f));
[self.view.layer addSublayer:tiledLayer];
Затем переместите реализацию drawLayer: inContext: в ваш контроллер представления.
Затем в вызове контроллера вашего представления освободите его как:
[tiledLayer removeFromSuperlayer];
tiledLayer.delegate = nil;
CGPDFDocumentRelease(pdf);
Обратите внимание, что вы не можете сделать это на подклассе UIView, поскольку drawLayer: inContext: будет конфликтовать с основным слоем UIView.