为什么80%的码农都做不了架构师?>>>   

虽然ARC引入之后NSAutoReleasePool的使用有了很大变化,但是了解NSAutoReleasePool的机制还是十分必要的,下面主要说一下:

NSAutoReleasePool * pool = [NSAutoReleasePool alloc] init];

//do something

之后,

[pool drain] 和 [pool release] 的区别:

release,在引用计数环境下,由于NSAutoReleasePool是一个不可以被retain的类型,所以release会直接dealloc pool对象。当pool被dealloc的时候,pool向所有在pool中的对象发出一个release的消息,如果一个对象在这个pool中autorelease了多次,pool对这个对象的每一次autorelease都会release。在GC环境下release是一个no-op操作(代表没有操作,是一个占据进行很少的空间但是指出没有操作的计算机指令)。

drain,在引用计数环境下,它的行为和release是一样的。在GC的环境下,这个方法调用objc_collect_if_needed出发GC。

因此,重点是:在GC环境下,release是一个no-op,所以除非你不希望在GC环境下出发GC,你都应该使用drain而不是使用release来释放pool。

转载于:https://my.oschina.net/dake/blog/196645

NSAutoReleasePool使用中drain和release的区别相关推荐

  1. Visual Studio Debug和Release的区别及obj的作用

    一.Debug和Release的区别 1.Debug:调试版本,包含调试信息,所以容量比Release大很多,并且不进行任何优化(优化会使调试复杂化,因为源代码和生成的指令间关系会更复杂),便于程序员 ...

  2. POPTEST老李谈Debug和Release的区别(c#) 1

    POPTEST老李谈Debug和Release的区别(c#) poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请 ...

  3. 关于VS项目平台的x86,x64,Any CPU以及Debug和Release的区别

    相信对于很多刚接触打包程序的同志来说,关于x86,x64,Any CPU这三个项目平台,以及解决方案配置Debug和Release有什么区别?这个问题一定有许多的困惑,甚至不乏一些已经工作了很久的老程 ...

  4. Debug和release版本区别 原码反码补码的转换及存储

    #define _CRT_SECURE_NO_WARNINGS 1  //Debug和release版本区别(VS2019版) //例子 #include<stdio.h> //int m ...

  5. cordon、drain、delete node区别

    cordon.drain.delete node区别 主要目的:导致node处于不可调度状态,新创建的pod容器不会调度在node上. cordon 将node置为SchedulingDisabled ...

  6. Debug模式和Release模式区别

    VC6.0中的Debug模式和Release模式区别         Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各 ...

  7. snapshots版本和release版本区别

    snapshot版本和release版本区别 在java开发过程中,我们经常会看到代码仓库中的某些项目版本以release或snapshots结尾,现在说说这两个版本之间有什么区别. 一般来说snap ...

  8. self.view = nil 和[self.view release]的区别

    再看视频的时候很多地方对于对象的释放老师分别用了两种方式: 1:release.减1的引用技术; 2:直接用nil赋值; 困惑来了,两种方式有啥区别呢? 在用retain或者copy的时候,self. ...

  9. debug和release的区别

    1.Debug和Release有什么区别,为什么要使用Release版本!  2.怎么把Debug转成Release Debug版本包括调试信息,所以要比Release版本大很多(可能大数百K至 数M ...

最新文章

  1. PHP上传图片三个步骤
  2. python连接mongo数据库
  3. mysql单表索引个数_MySQL性能:多个表与单个表和分区上的索引
  4. java 获得站点地址_JavaWeb项目里面的路径获取方法总结
  5. c语言选择法排序案例,谁能给我一个c语言选择排序法的简单例子
  6. 我在中关村,给不了的你爱的国贸(ZZ)
  7. ssh客户端_Termius for Mac(SSH客户端) v6.3.0
  8. C++成员函数的重载、覆盖与隐藏
  9. c# json转换实例
  10. Atitit enhance dev eff read req提升开发效率 可读性规范 目录 1. 提升效率的俩大原则 1 2. 命名规范 见名字知道意思 1 3. 层次结构缩减 单层 vs 双
  11. C语言再学习-- 大端小端详解(转)
  12. 从零玩转第三方登录之QQ登录
  13. Excepted in :flat namespace
  14. win10常用快捷键合集
  15. js:判断页面在 微信 微博 QQ 支付宝 钉钉 内置浏览器内打开
  16. React之Protals详解
  17. Modelsim搭建具有各组件的UVM验证平台
  18. excel如何将内容拆分
  19. python 保存图片
  20. 在 Ubuntu 中安装 DOSBox 玩老游戏

热门文章

  1. LeanCloud学习笔记(1)
  2. Mongodb python驱动教程
  3. ASP.NET MVC 5 入门指南汇总
  4. datatable与SqlDataReader
  5. 利用XML实现通用WEB报表打印(转载)
  6. 优化网站性能的35条规则
  7. CTF的一道安卓逆向
  8. python 爬虫代理
  9. Oracle 11 密码永不过期
  10. BZOJ4129: Haruna’s Breakfast