自动释放池

  • 作用

    • 自动释放对象的
    • 所有 autorelease 的对象,在出了作用域之后,会被自动添加到最近创建的自动释放池中
    • 自动释放池被销毁或者耗尽时,会向池中所有对象发送 release 消息,释放池中对象
    • 自动释放池,在 ARC & MRC 程序中,同样有效

高级面试题:

  • 自动释放池是什么时候创建的?什么时候销毁的?

  • 创建,运行循环检测到事件并启动后,就会创建自动释放池

  • 销毁:一次完整的运行循环结束之前,会被销毁

  • 常见面试题
for (long i = 0; i < largeNumber; ++i) {
NSString *str = [NSString stringWithFormat:@"hello - %ld", i];
str = [str uppercaseString];
str = [str stringByAppendingString:@" - world"];
}
  • 提问:以上代码是否有问题?如果有,如何解决?

  • 解决方法:引入自动释放池

    • 1> 外面加自动释放池(快):能够保证for循环结束后,内部产生的自动释放对象,都会被销毁

      需要等到 for 结束后,才会释放内存
    • 2> 里面加自动释放池(慢):能够每一次 for 都释放产生的自动释放对象!
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    NSLog(@"start");
CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
[self answer1];
NSLog(@"外 %f", CFAbsoluteTimeGetCurrent() - start); start = CFAbsoluteTimeGetCurrent();
[self answer2];
NSLog(@"内 %f", CFAbsoluteTimeGetCurrent() - start);
} - (void)answer1 {
@autoreleasepool {
for (long i = 0; i < largeNumber; ++i) {
NSString *str = [NSString stringWithFormat:@"hello - %ld", i];
str = [str uppercaseString];
str = [str stringByAppendingString:@" - world"];
}
}
} - (void)answer2 {
for (long i = 0; i < largeNumber; ++i) {
@autoreleasepool {
NSString *str = [NSString stringWithFormat:@"hello - %ld", i];
str = [str uppercaseString];
str = [str stringByAppendingString:@" - world"];
}
}
}
  • 实际测试结果,是运行循环放在内部的速度更快!
  • 日常开发中,如果遇到局部代码内存峰值很高,可以引入运行循环及时释放延迟释放对象

刀哥多线程自动释放池autoreleasepool的更多相关文章

  1. OC自动释放池autoreleasepool介绍

    自动释放池的机制是:它使得应用在创建新对象时,系统能够有效地管理应用所使用的内存. @autoreleasepool { statements } 在创建新对象时,并且系统未启动ARC特性,那么在使用 ...

  2. 自动释放池autoreleasepool

    自动释放池是NSAutoreleasePool的实例,其中包含了收到autorelease消息的对象.当一个自动释放池自身被销毁(dealloc)时,它会给池中每一个对象发送一个release消息(如 ...

  3. autoreleasepool 自动释放池的理解

    常见的面试题:以下代码存在什么样的问题?应该如何改进? for (int i = 0; i < 100000; i++) { NSString *str = @"abc"; ...

  4. 自动释放池的前世今生 ---- 深入解析 autoreleasepool

    http://draveness.me/autoreleasepool.html 关注仓库,及时获得更新:iOS-Source-Code-Analyze Follow: Draveness · Git ...

  5. C++模拟OC的多重自动释放池

    使用过OC的都知道,OC的引用计数机制用起来还比较方便.于是就仿照OC的形式搞了个C++引用计数. 支持多重自动释放池,每次autorelease都会放到栈顶的自动释放池中. 自动释放池也可以像变量一 ...

  6. 63 (OC)* NSAutoreleasePool 自动释放池

    目录 0:ARC 1: 自动释放池 2:NSAutoreleasePool实现原理 3:autorelease 方法 4: Runloop和Autorelease的关系 5: Using Autore ...

  7. autoreleasepool自动释放池

     示例: @autoreleasepool { ; i[largeNumber; i++) { (因识别问题,该行代码中尖括号改为方括号代替) Person *per = [[Person alloc ...

  8. (五十八)NSObject实现多线程、自动释放池的补充

    模拟一个图片下载的场景,图片的下载需要2s,在这期间为了保证程序的流畅,应该把图片的下载放在子线程中进行. 使用NSObject的方法performSelectorInBackground方法即可实现 ...

  9. (20)Cocos2d-x中的引用计数(Reference Count)和自动释放池(AutoReleasePool)

    引用计数 引用计数是c/c++项目中一种古老的内存管理方式.当我8年前在研究一款名叫TCPMP的开源项目的时候,引用计数就已经有了. iOS SDK把这项计数封装到了NSAutoreleasePool ...

随机推荐

  1. CSS动画基础知识

    CSS动画就是通过CSS (Cascading Style Sheet,层叠样式表)代码搭建的网页动画.它允许设计师和开发人员通过编辑网站的CSS代码来添加页面动画,从而轻松取代传统动画图片或flas ...

  2. 【面经】超硬核面经,已拿蚂蚁金服Offer!!

    写在前面 很多小伙伴都反馈说,现在的工作不好找呀,也不敢跳槽,在原来的岗位上也是战战兢兢!其实,究其根本原因,还是自己技术不过关,如果你技术真的很硬核,怕啥?想去哪去哪呗!这不,我的一个读者去面试了蚂 ...

  3. 【算法•日更•第三十期】区间动态规划:洛谷P4170 [CQOI2007]涂色题解

    废话不多说,直接上题:  P4170 [CQOI2007]涂色 题目描述 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符 ...

  4. Istio Routing 实践掌握virtualservice/gateway/destinationrule/AB版本发布/金丝雀发布

    原文 在学习像 Istio 这样的新技术时,看一下示例应用程序总是一个好主意. Istio repo 有一些示例应用程序,但它们似乎有各种不足. 文档中的 BookInfo 是一个很好的示例. 但是, ...

  5. 笔记:HTTP协议基础

    一.HTTP协议特点: 简单快速,请求方式有get.post.head 等8种 无连接无状态 支持模式有 B/S(浏览器) C/S(通过websocket去通信) URL,统一资源定位符,在网络中用来 ...

  6. SpringSecurity权限管理系统实战—八、AOP 记录用户、异常日志

    目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战-三 ...

  7. 第七天Scrum冲刺博客

    1.会议照片 2.项目进展 团队成员 昨日计划任务 今日计划任务 梁天龙  学习课程页面  建议页面 黄岳康  定义个人课程  登陆页面 吴哲翰  完成页面的与后端的沟通交流  继续保持确认功能齐全 ...

  8. 如何分析和监测竞争对手网站的seo数据

    http://www.wocaoseo.com/thread-36-1-1.html 如何分析和监测况争对手的网站的seo操作方法和seo数据?主要从哪几个方面考虑?如何分析和监测竞争对手网站的seo ...

  9. Android Weekly Notes Issue #428

    Android Weekly Issue #428 Kotlin Flow Retry Operator with Exponential Backoff Delay 这是讲协程Flow系列文章中的一 ...

  10. 2020重新出发,MySql基础,MySql字符集

    目录 MySQL字符集和校对规则详解 MySQL字符集的转换过程 MySQL查看字符集和校对规则 MySQL设置默认字符集和校对规则 服务器字符集和校对规则 数据库字符集和校对规则 表字符集和校对规则 ...