美文网首页
iOS开发自动释放池(个人看法):

iOS开发自动释放池(个人看法):

作者: 为你哭泣我 | 来源:发表于2016-08-28 08:42 被阅读0次

自动释放池什么时候创建,什么时候销毁?

自动释放池什么时候创建,什么时候销毁?

自动释放池什么时候创建,什么时候销毁?

运行循环结束前会释放自动释放池,还有就是池子满了,也会销毁。

下面代码存在内存问题么?如果存在如何解决?为什么

解题思路:首先根据类方法创建的,而且他们都用的是类方法,类方法是每次调用,每次都会为你创建一个新的对象。还有就是通过对象方法创建的对象,如果不是通过alloc new retain copy 创建的对象,那么他们内部都有一个autorelease.(可以通过NSLog(@"%p",str),查看每次调用过后的内存地址,他们的内存地址是不一样的),他们都是通过自动释放池进行自动释放的,所以这些字符串对象会等到循环结束时才会进行释放,而此时它们会消耗大量的内存资源,所以她们存在内存问题。---通过xcode查看内存峰值就可以看出运行时的变化

解决办法:从题中看出每次循环这个对象就不会再调用了,所以,我们可以将每一次循环放入到自动释放池中去,这样每次循环结束后变会将此次创建的对象销毁,如下代码

默认主线的运行循环(runloop)是开启的,子线程的运行循环(runloop)默认是不开启的,也就意味着子线程中不会创建autoreleasepool,所以需要我们自己在子线程中创建一个自动释放池。(子线程里面使用的类方法都是autorelease,就会没有池子可释放,也就意味着后面没有办法进行释放,造成内存泄漏。)----在主线程中如果产生事件那么runloop才回去创建autoreleasepool,通过这个道理我们就知道为什么子线程中不会创建自动释放池了,因为子线程的runloop默认是关闭的,所以他不会自动创建autoreleasepool,需要我们手动添加。

相关文章

  • iOS开发自动释放池(个人看法):

    自动释放池什么时候创建,什么时候销毁? 自动释放池什么时候创建,什么时候销毁? 自动释放池什么时候创建,什么时候销...

  • iOS 内存管理--自动释放池底层原理

    前言 在内存管理的学习中自动释放池的原理学习是必须的,作为一个合格的iOS开发者,必须要明白自动释放池的操作原理,...

  • Objective-C(十六、内存管理,自动释放池,ARC,强指

    转载自: Objective-C(十六、内存管理,自动释放池,ARC,强指针,弱指针,方法族)——iOS开发基础 ...

  • Autorelease Pool

    自动释放池是iOS中的内存回收机制,能够延迟对象的释放。当池中的对象超出作用域后并不会立即被释放,等待自动释放池销...

  • ios 自动释放池

    什么是自动释放池 OC中的一种内存自动回收机制,它可以延迟加入AutoreleasePool中的变量release...

  • iOS 自动释放池

    1.申明了一个对象__autoreleasepool 相当于调用了objc_autoreleasePoolPush...

  • iOS自动释放池

    原作者原文链接:http://blog.sunnyxx.com/2014/10/15/behind-autorel...

  • ios自动释放池

    一. 自动释放池源码解析 在main函数中使用如下命令重写成c++文件 clang -rewrite-objc m...

  • 第一季:基础

    参考文章来源 腾讯社招iOS面试记录 1.谈谈你对自动释放池的理解, 1.自动释放池是OC提供的一种自动回收机制,...

  • iOS AutoreleasePool的底层原理总结

    一,概念 AutoreleasePool 顾名思义是自动释放池的概念,就是将iOS项目开发中的对象的内存通通都放入...

网友评论

      本文标题:iOS开发自动释放池(个人看法):

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