Я читаю файл 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 - это uiview из примера ZoomingPDFViewer. он рисует CGPDFPageRef, используя CATiledLayer.
после вызова метода tests представление удаляется (становится невидимым), но память, выделенная с помощью CGPDFDocumentCreateWithURL, не освобождается.
CGPDFDocumentGetNumberOfPagesвозвращаетsize_t, а неint.size_tне имеет знака, тогда какintявляется знаковым, аsize_tможет быть больше (в байтах и, следовательно, в диапазоне), чемint. Остерегайтесь больших документов с кажущимся отрицательным (на самом деле просто очень большим) числом страниц или с фактически случайным числом страниц (когдаsize_tбольше, чемint, а ваше число настолько велико, что превышает диапазонint, поэтому часть часть номера обрезается). Вы всегда должны использовать правильный тип для значений, с которыми вы работаете. - person Peter Hosey   schedule 05.10.2010