Я читаю файл 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