美文网首页
for循环的内存溢出问题

for循环的内存溢出问题

作者: 不爱用句号的家伙 | 来源:发表于2016-12-29 11:31 被阅读0次

    最近写了一个作品还原的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指针,

    相关文章

      网友评论

          本文标题:for循环的内存溢出问题

          本文链接:https://www.haomeiwen.com/subject/cniuvttx.html