2013-11-14 15 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

您的示例代碼很好,發佈文檔不會導致頁面出現任何問題。

如果頁面因爲某種原因需要文檔纔是有效的,那麼它會在內部保留它,所以沒什麼需要擔心的。

相關問題