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相关推荐

  1. NSAutoReleasePool使用中drain和release的区别

    为什么80%的码农都做不了架构师?>>>    虽然ARC引入之后NSAutoReleasePool的使用有了很大变化,但是了解NSAutoReleasePool的机制还是十分必要的 ...

  2. 了解Objective-C中NSAutoreleasePool使用方法

    本文的目的是来了解Objective-C中NSAutoreleasePool使用方法,Objective-C的Foundation库实际上是种运行级对象系统,与一般的对象语言,例如C++,Java不一 ...

  3. nsautoreleasepool研究

    站位 转载于:https://www.cnblogs.com/max5945/p/4921202.html

  4. ARC指南 strong和weak指针

    一.简介 ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内存管理,因为编 ...

  5. Objective-C语法简记

    开始学习iPhone开发了,虽然现在已经有了Swift,但我还是老老实实地学习Objective-C,鄙人入门的程序语言是C,后来学习了C#和Java,现在来学Objective-C,这篇只是一些很简 ...

  6. 如何在Terminal命令行模式下运行Objective-C

    一般Objective-C的代码都在Xcode中调试,今天实验了下如何在命令行模式下运行,还是比较简单的,记录分享一下. File: xxd.h #include <Foundation/Fou ...

  7. ios 常见性能优化

    1. 用ARC管理内存 2. 在正确的地方使用reuseIdentifier 3. 尽可能使Views透明 4. 避免庞大的XIB 5. 不要block主线程 6. 在Image Views中调整图片 ...

  8. iOS 进阶—— iOS内存管理

    1 似乎每个人在学习 iOS 过程中都考虑过的问题 alloc retain release delloc 做了什么? autoreleasepool 是怎样实现的? __unsafe_unretai ...

  9. 另辟蹊径创建移动应用:iOS和Android代码共享

    2019独角兽企业重金招聘Python工程师标准>>> 过去几年,移动应用席卷了整个世界,在工作和生活的方方面面改变着我们使用互联网的方式.创建移动应用的各种技术也随之兴起,各种开发 ...

最新文章

  1. android edittext 限制文本框输入的长度和提示信息
  2. NYOJ 585 取石子(六)
  3. java从入门到精通_Java入门到精通、学习路线、就业方向、薪资及前景分析(上篇)...
  4. Android控制EditText的焦点
  5. 【C++基础学习】引起类模板被实例化情形总结
  6. python爬虫爬取大众点评并导入redis
  7. mysql 备份 索引_mysql-索引、导入、导出、备份、恢复
  8. Java讲课笔记29:Swing入门
  9. c++与unreal 的uc脚本交互
  10. Atitit 调用另外语言的功能 目录 1. Waht 常见的语言java python js sql xml h5 c# php等之间的互相调用 1 2. 为什么需要互相调用why 1 3. 常
  11. Matlab 2016a 安装及破解教程
  12. 东大22春实用写作X《实用写作》在线平时作业1百分非答案
  13. CentOS的下载和安装
  14. 选择率,基数计算公式
  15. 自考计算机专业就业率,自考计算机专业就业前景和就业选择
  16. 博客论坛系统数据库之表的设计
  17. 基于双曝光与数值计算法全息干涉相位畸变补偿实例分析
  18. android 抽屉组件,Android 抽屉控件 VerticalDrawerLayout
  19. html实现文字隐藏展开特效代码,外贸建站之隐藏展开文字JS特效代码分享
  20. wysiwyg html 编辑器,漂亮的富文本编辑器WYSIWYG

热门文章

  1. ISE安装和FLASH烧录
  2. 建堆 java_堆排序就这么简单
  3. php acl控制,用PHP怎么实现一个ACL系统?
  4. hive 列转行_掌握这个SQL技巧超越80%的人——行转列/列转行
  5. linux压缩一个文件的命令行,linux下用命令行解压缩文件
  6. 卵巢鸿蒙不全怎么检查,性激素六项如何看黄体功能萎缩不全
  7. tensorflow中转置卷积运算例子
  8. 牛客练习赛85 数学家的迷题 (带修莫队/线段树)
  9. Codeforces Round #648 (Div. 2)题解 A-D
  10. 最小割 ---- 集合冲突模型 ----- P1646 [国家集训队]happiness