我正在阅读PDF文件,然后将其发布:
CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), (CFStringRef)@"somepdf.pdf", NULL, NULL);
CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL);
int pagesCount = CGPDFDocumentGetNumberOfPages(pdf);
CGPDFDocumentRelease(pdf);
但是释放后内存没有被释放(用Instruments检查)。为什么?我在记忆管理方面缺少什么。
感谢。
修改
这是我的代码:
- (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示例的uiview。它使用CGPDFPageRef
绘制CATiledLayer
。
在我调用tests
方法后,视图被删除(变得不可见),但是没有释放分配有CGPDFDocumentCreateWithURL
的内存。
答案 0 :(得分:2)
什么内存没有发布?如你所说,你正式发布了CGPDFDocument,所以它应该已经消失了。
你确定这不是CFURL吗?你没有表现出自己的释放,但你复制了它,所以你有义务。请参阅the Memory Management Guide for Core Foundation。
您可以使用ObjectAlloc工具确定哪些特定对象保持活动状态。将时间轴中的起点和终点分别设置为创建对象之前和释放之后,然后将仪器设置为显示“Objects Created& amp;还活着”。您还可以使用“泄漏”工具向您显示您不再拥有指针的物体。这两种工具最初都按类分类显示,您可以深入查看实例,然后查看事件(分配,保留,自动释放,发布和解除分配)。