NSAutoreleasePool
2019独角兽企业重金招聘Python工程师标准>>>
autorelease pool不是天生的,需要手动创立。只不过在新建一个iphone项目时,xcode会自动帮你写好。autorelease pool的真名是NSAutoreleasePool。
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSAutoreleasePool内部包含一个数组(NSMutableArray),用来保存声明为autorelease的所有对象。如果一个对象声明为autorelease,系统所做的工作就是把这个对象加入到这个数组中去。
ClassA *obj1 = [[[ClassA alloc] init] autorelease]; //retain count = 1,把此对象加入autorelease pool中
NSAutoreleasePool自身在销毁的时候,会遍历一遍这个数组,release数组中的每个成员。如果此时数组中成员的retain count为1,那么release之后,retain count为0,对象正式被销毁。如果此时数组中成员的retain count大于1,那么release之后,retain count大于0,此对象依然没有被销毁,内存泄露。
所有标记为autorelease的对象都只有在这个pool销毁时才被销毁。
如果你有大量的对象标记为autorelease,这显然不能很好的利用内存,在iphone这种内存受限的程序中是很容易造成内存不足的。例如:
int main (int argc, c*****t char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int i, j;
for (i = 0; i < 100; i++ )
{
for (j = 0; j < 100000; j++ )
[NSString stringWithFormat:@"1234567890"];//产生的对象是autorelease的。
}
[pool release];
return (0);
} // main
OC程序中可以嵌套创建多个autorelease pool。在需要大量创建局部变量的时候,可以创建内嵌的autorelease pool来及时释放内存。
转载于:https://my.oschina.net/makeffort/blog/85612
NSAutoreleasePool相关推荐
- NSAutoReleasePool使用中drain和release的区别
为什么80%的码农都做不了架构师?>>> 虽然ARC引入之后NSAutoReleasePool的使用有了很大变化,但是了解NSAutoReleasePool的机制还是十分必要的 ...
- 了解Objective-C中NSAutoreleasePool使用方法
本文的目的是来了解Objective-C中NSAutoreleasePool使用方法,Objective-C的Foundation库实际上是种运行级对象系统,与一般的对象语言,例如C++,Java不一 ...
- nsautoreleasepool研究
站位 转载于:https://www.cnblogs.com/max5945/p/4921202.html
- ARC指南 strong和weak指针
一.简介 ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内存管理,因为编 ...
- Objective-C语法简记
开始学习iPhone开发了,虽然现在已经有了Swift,但我还是老老实实地学习Objective-C,鄙人入门的程序语言是C,后来学习了C#和Java,现在来学Objective-C,这篇只是一些很简 ...
- 如何在Terminal命令行模式下运行Objective-C
一般Objective-C的代码都在Xcode中调试,今天实验了下如何在命令行模式下运行,还是比较简单的,记录分享一下. File: xxd.h #include <Foundation/Fou ...
- ios 常见性能优化
1. 用ARC管理内存 2. 在正确的地方使用reuseIdentifier 3. 尽可能使Views透明 4. 避免庞大的XIB 5. 不要block主线程 6. 在Image Views中调整图片 ...
- iOS 进阶—— iOS内存管理
1 似乎每个人在学习 iOS 过程中都考虑过的问题 alloc retain release delloc 做了什么? autoreleasepool 是怎样实现的? __unsafe_unretai ...
- 另辟蹊径创建移动应用:iOS和Android代码共享
2019独角兽企业重金招聘Python工程师标准>>> 过去几年,移动应用席卷了整个世界,在工作和生活的方方面面改变着我们使用互联网的方式.创建移动应用的各种技术也随之兴起,各种开发 ...
最新文章
- android edittext 限制文本框输入的长度和提示信息
- NYOJ 585 取石子(六)
- java从入门到精通_Java入门到精通、学习路线、就业方向、薪资及前景分析(上篇)...
- Android控制EditText的焦点
- 【C++基础学习】引起类模板被实例化情形总结
- python爬虫爬取大众点评并导入redis
- mysql 备份 索引_mysql-索引、导入、导出、备份、恢复
- Java讲课笔记29:Swing入门
- c++与unreal 的uc脚本交互
- Atitit 调用另外语言的功能 目录 1. Waht 常见的语言java python js sql xml h5 c# php等之间的互相调用	1 2. 为什么需要互相调用why	1 3. 常
- Matlab 2016a 安装及破解教程
- 东大22春实用写作X《实用写作》在线平时作业1百分非答案
- CentOS的下载和安装
- 选择率,基数计算公式
- 自考计算机专业就业率,自考计算机专业就业前景和就业选择
- 博客论坛系统数据库之表的设计
- 基于双曝光与数值计算法全息干涉相位畸变补偿实例分析
- android 抽屉组件,Android 抽屉控件 VerticalDrawerLayout
- html实现文字隐藏展开特效代码,外贸建站之隐藏展开文字JS特效代码分享
- wysiwyg html 编辑器,漂亮的富文本编辑器WYSIWYG
热门文章
- ISE安装和FLASH烧录
- 建堆 java_堆排序就这么简单
- php acl控制,用PHP怎么实现一个ACL系统?
- hive 列转行_掌握这个SQL技巧超越80%的人——行转列/列转行
- linux压缩一个文件的命令行,linux下用命令行解压缩文件
- 卵巢鸿蒙不全怎么检查,性激素六项如何看黄体功能萎缩不全
- tensorflow中转置卷积运算例子
- 牛客练习赛85 数学家的迷题 (带修莫队/线段树)
- Codeforces Round #648 (Div. 2)题解 A-D
- 最小割 ---- 集合冲突模型 ----- P1646 [国家集训队]happiness