0

具体来说,为了封装,我想使用如下访问器:

- (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;
}

我假设那些使用该方法的人会知道该页面已被保留(因此将单词 create 放在方法名称中,即使它有点误导)并且他们需要在使用完它后释放它。

问题是......自从我发布了文档后,该页面是否有效,或者我是否正在尝试访问已发布的内容?

4

2 回答 2

0

只要您不异步调用它就可以了。

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

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

于 2013-11-14T11:19:32.923 回答
0

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

如果页面出于某种原因需要文档有效,那么它将在内部保留它,因此您无需担心。

于 2017-05-04T08:59:48.043 回答