2013-11-14 13 views
0

具体而言,封装的缘故,我想用像访问:如果我保留了其中一个CGPDFPageRefs并希望页面不会消失,我可以发布CGPDFDocumentRef吗?

- (CGPDFPageRef)pageCreate { 
    // Assume url exists and is valid 
    NSURL *url = [self url]; 
    CGPDFDocumentRef document = CGPDFDocumentCreateWithURL((__bridge CFURLRef)url); 
    CGPDFPageRef result = CGPDFDocumentGetPage(document,1); 
    CGPDFPageRetain(result); 
    CGPDFDocumentRelease(document); 
    return result; 
} 

我假设那些使用该方法会知道该页面已被保留(因而字当头创建的方法名称,即使它有点误导),并且他们在完成使用时需要释放它。

问题是......自从我发布了文档或者我会试图访问已发布的东西,页面才会生效吗?

回答

0

只要你不是异步调用它就没关系。

默认情况下,NSRunLoop在每次循环时创建NSAutoreleasePool - 因此每个带有0 retainCount的变量都可以在下一个循环进入之前释放 - 这意味着只要它们不是异步的就可以完成所有的功能 - 它不会循环你的代码之间。

对于异步,您需要创建您自己的NSAutoreleasePool。

+0

对不起,这不是我问。 –

0

您的示例代码很好,发布文档不会导致页面出现任何问题。

如果页面因为某种原因需要文档才是有效的,那么它会在内部保留它,所以没什么需要担心的。

相关问题