自动释放池原理

您所在的位置:网站首页 淘汰赛的图怎么画 自动释放池原理

自动释放池原理

2023-03-16 06:24| 来源: 网络整理| 查看: 265

 autorelease:即延迟释放。

自动释放池的作用:在程序执行完毕即池子即将销毁的时候会对池子中所有调用autorelease的对象进行一次release操作。

面试题一:自动释放池什么时候创建,什么时候销毁?

每一次运行循环执行后,也就是每当事件被触发时都会创建自动释放池。在程序执行的过程中,所有autorelease的对象在出了作用域之后会被添加到最近创建的自动释放池中。运行循环结束前会释放自动释放池,还有池子满了也会销毁。

其工作原理是:自动释放池被销毁或耗尽时会向池中的所有对象发送release消息,释放所有autorelease对象。

面试题二:

int largeNumber = 2 * 1024 * 1024;

/*  问题:(1)以下代码是否存在问题?(2)如果有,怎么修改?

 网上的解决办法:

 1)@autoreleasepool 放在外面,保证循环之后释放循环中的自动释放对象,适用于创建对象次数不太大的循环。

 2)@autoreleasepool 放在内部,每一次循环之后,都倾倒一次自动释放池,内存管理是最好的,但是性能不好!适用于创建对象次数很大的循环。

 */

for (int i = 0; i < largeNumber; i++) {

    @autoreleasepool {

        NSString *str = [NSString stringWithFormat:@"Hello "];

        str = [str uppercaseString];

        str = [str stringByAppendingString:@" - World"];

    }

}

注意:每一个线程都有一个RunLoop,但是只有主线程的RunLoop(运行循环)会默认启动。也就意味着不会自动创建自动释放池,子线程里面autorelease的对象也就意味着没有池子可存放,也就意味着在后面无法进行释放,造成内存泄露。在使用NSThread做多线程开发时,需要在线程调度方法中手动添加自动释放池。@autorelease{  // 执行代码  }

需要特别注意的是:如果没有使用alloc new copy retain 方法而创建了对象,则内部全是使用了autorelease方法。所以使用自动释放池能对这些对象进行及时释放。

0 0 自动释放池原理 自动释放池简单原理 iOS之自动释放原理 IOS内存管理--自动释放池的实现原理 iOS自动释放池_原理_如何工作 OC中自动释放池原理深入剖析 NSAutoreleasePool自动释放池 IOS自动释放池 IOS自动释放池 自动释放池NSAutoReleasePool 自动释放池autoreleasepool 自动释放池 自动释放池, 自动释放池 (autoReleasePool) 自动释放池 iOS---自动释放池 自动释放池 自动释放池 引入内联函数的目的和作用 eclipse或myeclipse常用配置和快捷键 srm 552 js不支持函数重载 [AndroidUI]自定义view(二):实现带说明的图片 自动释放池原理 33.Word Pattern 程序员既要写好代码,又要写好文档 Node之锚点 Android和Java好的学习网站 Vim中的查找和替换 Android开发中无处不在的设计模式——观察者模式 20151017的NOIP模拟赛 iOS代码设置渐变背景色


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3