Objective c iOS核心图形PDF内存管理问题

Objective c iOS核心图形PDF内存管理问题,objective-c,memory-management,core-graphics,Objective C,Memory Management,Core Graphics,我正在阅读PDF文件,然后发布它: CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), (CFStringRef)@"somepdf.pdf", NULL, NULL); CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL); int pagesCount = CGPDFDocumentGetNumberOfPages(pdf

我正在阅读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
-是ZoomingPdfView示例中的uiview。它使用
CATiledLayer
绘制
CGPDFPageRef


调用
tests
方法后,视图将被删除(变得不可见),但使用
CGPDFDocumentCreateWithURL
分配的内存不会被释放。

哪些内存不会被释放?正如您所说,您及时发布了CGPDFDocument,所以这应该已经消失了

你确定粘贴的不是CFURL吗?你没有表现出你自己在发布它,但是你复制了它,所以你必须这样做。看


您可以使用ObjectAlloc工具确定哪些特定对象仍处于活动状态。将时间线中的起点和终点分别设置为创建对象之前和释放对象之后,然后将仪器设置为显示“创建的对象&仍然存在”。您还可以使用“泄漏”工具向您显示哪些对象仍然存在,而您不再有指针指向这些对象。这两个工具最初都按类显示细分,您可以深入到实例,然后是事件(分配、保留、自动释放、释放和释放)。

CGPDFDocumentGetNumberOfPages
返回一个
size\u t
,而不是
int
size\u t
是无符号的,而
int
是有符号的,
size\u t
可能比
int
大(以字节为单位,因此在范围内)。当心那些看起来页数为负数(实际上只是非常大)的大型文档,或者页面数实际上是随机的(当
size\u t
大于
int
并且您的数字太大以至于超出了
int
的范围时,部分数字会被删除)。您应该始终为正在使用的值使用正确的类型。谢谢您,Peter,我会修复它。使用CGPDFDocumentCreateWithURL分配的内存没有释放(~3MB已分配并仍在使用)。我编辑了有问题的代码,您是否应该将
self.view
属性设置为
nil
,而不是释放您仍然保留的视图?另外,您是否验证了该页面(我假设该视图保留)已发布?