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 を作成します。そのため、retainCount が 0 のすべての変数は、次のループが始まる前に割り当てを解除できます。つまり、非同期でない限り、すべての関数を終了できます。コード間でループしません。 .

非同期の場合、独自の NSAutoreleasePool を作成する必要があります。

于 2013-11-14T11:19:32.923 に答える