Ios 释放圆弧/非圆弧中的对象会使内存处于使用状态

Ios 释放圆弧/非圆弧中的对象会使内存处于使用状态,ios,objective-c,memory-management,Ios,Objective C,Memory Management,我有一个关于内存管理的一般问题。我可以用下面的代码创建一个对象,用数据填充它,然后清理并释放它,但是即使在对象被释放之后,它使用的内存仍然在使用 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. NSBundle *bundle1 = [NSBundle mainBundle];

我有一个关于内存管理的一般问题。我可以用下面的代码创建一个对象,用数据填充它,然后清理并释放它,但是即使在对象被释放之后,它使用的内存仍然在使用

- (void)viewDidLoad {
    [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
    NSBundle *bundle1 = [NSBundle mainBundle];
    NSString *path = [bundle1 pathForResource:@"Oxford Latin Dictionary - Optimized" ofType:@"pdf"];
    NSURL *pathURL = [NSURL fileURLWithPath:path];
    PDFObject* pdfObject = [[PDFObject alloc] initWithURL:pathURL withCachedPages:25 startAtPage:1 withFrame:self.view.frame];
    [pdfObject readPdfAtPage:1];
    [pdfObject generateThumbnails:self.view.frame.size.width/10];
    [pdfObject cleanThumbnailsAndSubviews];
    [pdfObject clearMemory];
    [pdfObject release];
}
程序在创建pdfObject pdfObject*pdfObject=[[pdfObject alloc]init…]之前使用了大约9MB的内存,在初始化和设置该对象时使用了大约23MB的内存[pdfObject generatethumbails:self.view.frame.size.width/10];之后,在pdfObject中的所有对象都被释放并且pdfObject本身也被释放之后,程序仍然使用大约23MB。我在ARC打开并使用NSObject=nil强制释放对象时遇到了同样的问题。当我试图创建和销毁太多这些对象时,这最终会导致崩溃


我肯定错过了objective c内存管理的一些简单部分,但我认为我遵循的是良好的做法,即如果创建对象,最终必须将其销毁。来自JAVA背景并没有帮助。

使用ARC。2014年使用手动引用计数是愚蠢的。它让生活变得更加艰难,没有充分的理由

考虑到您使用的是手动引用计数,您的代码看起来是合理的。您创建了许多对象,但它们似乎都是自动删除的临时对象,除了您alloc/init并在最后释放的PDFObject

我的猜测是PDFObject正在内部进行图像缓存。这会导致应用程序的内存占用增加,但不是很糟糕。如果内存压力增加,系统将刷新缓存的图像,然后再采取更严重的步骤,如向您发送内存警告或终止应用程序

PDFObject类也可能存在内存泄漏,或者它在基于系统的图像缓存之上进行自己的缓存

您可能希望使用内存分析工具来查看正在添加到应用程序内存占用的对象。但是,解释如何这样做超出了论坛帖子的范围。过去有WWDC会议视频对此进行了说明,也有不少博客帖子和在线教程进行了解释如何使用instruments工具找出应用程序内存使用量增长的原因。

什么是PDFObject?请检查它是否正确释放了dealloc中的所有内容。