iOS Core Graphics PDF проблема управления памятью - PullRequest
0 голосов
/ 04 октября 2010

Я читаю файл 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.он рисует CGPDFPageRef, используя CATiledLayer.

после того, как я вызову метод tests, представление удаляется (становится невидимым), но память, выделенная с помощью CGPDFDocumentCreateWithURL, не освобождается.

1 Ответ

2 голосов
/ 05 октября 2010

Какая память не освобождается?Как вы говорите, вы должным образом выпустили CGPDFDocument, так что он должен был исчезнуть.

Вы уверены, что это не CFURL, который торчит?Вы не показываете, что выпускаете это, но вы скопировали это, так что вы обязаны.См. Руководство по управлению памятью для Core Foundation .

. Вы можете использовать инструмент ObjectAlloc, чтобы определить, какие конкретные объекты остаются живыми.Установите начальную и конечную точки на временной шкале до того, как объект был создан и после того, как он был освобожден, соответственно, затем установите инструмент, чтобы показать вам «Объекты созданы и еще живы».Вы также можете использовать инструмент «Утечки», чтобы показать вам, какие объекты еще живут, на которые у вас больше нет указателя.Оба инструмента первоначально показывают разбивку по классам, в которую можно перейти к экземплярам, ​​а затем к событиям (распределения, удержания, авто-релизы, релизы и освобождения).

...