for循环的内存溢出问题

最近写了一个作品还原的for循环,循环大概是这样的。在图片一多的时候,就会崩溃。最后调试跟踪后,发现图片下载和转码的时候,会使用至少30m的内存。问题找到了,就可以处理了。

红圈处是内存使用大户

添加autoreleasepool以后,情况好多了 


在内存消耗最大的地方添加了autoreleasepool

然后我下载了一个含有20张图片的文档并进行了内存跟踪

使用前
使用后



为什么添加了autoreleasepool就能彻底的释放内存了呢?

这里就要讲到内存的管理机制。


自动释放池

每次创建的对象(都是autorelease属性)都会被注册到该线程中的autorelease pool中,在当次代码块没有执行完之前,pool里的对象是不会释放的。

在添加autorelease pool以后,池的block作用域外,该pool会被drain,其中注册的对象全部都会release,这样就保证内存不会出现不足的情况。


for page in pages {

    @autoreleasepool{

    // 生成大量对象,并注册到

    //

    }

    // pool drain,池中对象将全体释放

}

那苹果是如何实现的呢?

id obj = [[anyClass alloc] init];

alloc // 计算容纳对象所需的空间大小,内存空间置0后返回一个isa指针,

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容