我讀PDF文件,然後將其釋放:iOS的核芯顯卡PDF內存管理問題
CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), (CFStringRef)@"somepdf.pdf", NULL, NULL);
CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL);
int pagesCount = CGPDFDocumentGetNumberOfPages(pdf);
CGPDFDocumentRelease(pdf);
但內存沒有釋放後釋放(檢查與儀器)。爲什麼?內存管理中缺少的東西。
謝謝。
編輯
這裏是我的代碼:
- (void)loadView {
[super loadView];
CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), (CFStringRef)@"some.pdf", NULL, NULL);
pdf = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL);
CFRelease(pdfURL);
CGPDFPageRef pdfPage = CGPDFDocumentGetPage(pdf, 1);
TiledPDFView * v = [[TiledPDFView alloc] initWithFrame:self.view.bounds andScale:1];
[v setPage:pdfPage];
[self.view addSubview:v];
UIButton * but = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[but setTitle:@"removeView" forState:UIControlStateNormal];
[but addTarget:self action:@selector(tests) forControlEvents:UIControlEventTouchDown];
but.frame = CGRectMake(0, 0, 100, 40);
[self.view addSubview:but];
}
-(void) tests {
[self.view removeFromSuperview];
[self.view release];
CGPDFDocumentRelease(pdf);
}
pdf
是實例變量。 TiledPDFView
- 從ZoomingPDFViewer示例中查看。它使用CATiledLayer
繪製CGPDFPageRef
。
我調用tests
方法後,視圖被刪除(變爲不可見),但分配了CGPDFDocumentCreateWithURL
的內存未被釋放。
'CGPDFDocumentGetNumberOfPages'返回'size_t',而不是'int'。 'size_t'是無符號的,而'int'是有符號的,'size_t'可能比int更大(以字節爲單位,因此在範圍內)。當心那些看似負面(實際上只是非常大)頁面數量的大文檔,或者有效的隨機頁數(當size_t大於int時,並且你的數字太大以至於超出了範圍'int',所以部分數字會被刪除)。你應該總是使用正確的類型來處理你正在使用的值。 – 2010-10-05 03:04:21
謝謝彼得,我會解決它的。 – negersiu 2010-10-05 07:23:03