iOS中autoreleasepool的理解和使用
来源:互联网 发布:淘宝上的牛排可以买吗 编辑:程序博客网 时间:2024/05/22 12:58
关于@autoreleasepool
自动释放池block,苹果官方文档:Using Autorelease Pool Blocks
面试经常会有这样的问题:
1.什么是@autoreleasepool?
2.里面对象的内存什么时候释放?
3.什么时候要用@autoreleasepool?
回答:
1.@autoreleasepool是自动释放池,让我们更自由的管理内存
2.当我们手动创建了一个@autoreleasepool,里面创建了很多临时变量,当@autoreleasepool结束时,里面的内存就会回收
3.ARC时代,系统自动管理自己的autoreleasepool,runloop就是iOS中的消息循环机制,当一个runloop结束时系统才会一次性清理掉被autorelease处理过的对象,其实本质上说是在本次runloop迭代结束时清理掉被本次迭代期间被放到autorelease pool中的对象的。至于何时runloop结束并没有固定的duration。
方便是方便了,但是有些情况下,我们还是需要手动创建自动释放池,那么,什么时候呢?
- 如果你正在编写不基于UI 框架的程序,比如命令行工具。
- 如果你编写的循环创建了很多临时对象。
你可以在循环中使用自动释放池block,在下次迭代前处理这些对象。在循环中使用自动释放池block,有助于减少应用程序的内存占用。 - 你生成了一个辅助线程。
一旦线程开始执行你必须自己创建自动释放池。否则,应用将泄漏对象。
这是苹果文档中的翻译,按我的理解,最重要的使用场景,应该是有大量中间临时变量产生时,避免内存使用峰值过高,及时释放内存的场景。
举个例子
NSArray *urls = <# An array of file URLs #>;for (NSURL *url in urls) { @autoreleasepool { NSError *error; NSString *fileContents = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error]; }}
这个for循环里如果不使用@autoreleasepool,那临时变量内存可能是爆发式的,但是使用了@autoreleasepool,在每个@autoreleasepool结束时,里面的临时变量都会回收,内存使用更加合理。
0 0
- iOS中autoreleasepool的理解和使用
- AutoreleasePool 的理解
- NSRunloop,runloop,autoReleasePool和thread的关系理解
- Autoreleasepool的理解及原理
- 内存优化autoreleasepool的使用
- iOS基本内存管理:autorelease和autoreleasepool
- iOS基本内存管理:autorelease和autoreleasepool
- iOS 开发NSRunLoop和AutoreleasePool详解
- iOS中respondsToSelector与conformsToProtocol的相关理解和使用
- iOS中respondsToSelector与conformsToProtocol的相关理解和使用
- iOS中respondsToSelector与conformsToProtocol的相关理解和使用
- iOS中respondsToSelector与conformsToProtocol的相关理解和使用
- iOS-@autoreleasepool-内存的分配与释放
- iOS开发-AutoreleasePool是什么时候销毁的?
- NSRunloop,runloop,autoReleasePool和thread的关系理解及案例解决
- NSRunloop,runloop,autoReleasePool和thread的关系理解及案例解决
- objective-c中@autoreleasepool的用法
- 循环中autoreleasepool的添加位置
- mstsc保存凭据并创建快捷方式
- Java_Top 8 Diagrams for Understanding Java
- LInix_Ubuntu开机出现grub rescue> 终端模式修复方法
- Android开机启动
- [转]extern使用方法总结
- iOS中autoreleasepool的理解和使用
- Linux_home的迁移
- Android6.0 Telephony流程分析——数据连接Enable过程
- Java_反射
- 1. RabbitMQ基础概念详细介绍
- c++继承初识
- 回调函数和钩子函数
- Git_代码提交
- BitmapFactory.Options常用的几个参数