2016 - 2 - 20 ARC知识总结(二 autorelease概念及实现)
首先祝自己生日快乐~23咯~
一 autorelease的概念
autorelease会像C语言的自动变量那样来对待对象实例。当超出作用域(相当于变量作用域)时,对象的实例release实力方法被调用。
另外,同C语言的自动变量不同的是,编程人员可以自己设置变量的作用域,即通过autoreleasepool来实现 。
调用对象的autorelease方法,其实就是将对象就近放入一个NSAutoreleasePool中,该对象的生存周期相当于C语言变量的作用域。对于所有调用了autorelease方法的对象,当自动释放池被销毁时,都将调用release方法。
一个典型的应用就是NSRunloop中。当observe监听到Runloop进入时,会创建自动释放池,当Runloop进入休眠之前会销毁自动释放池并重新创建一个新的自动释放池。在Runloop退出时,也会销毁自动释放池通过这种方法,就可以避免出现内存不足的现象。
另外一个就是在cocoa框架中的很多类方法也会返回autorelease的对象,比如+array。
二 autorelease的实现
通过GNUstep学习:
在调用autorelease方法时,内部其实是调用了当前所使用的autoreleasepool对象的实例方法
[pool addObject:obj];
而该方法是实质就是向内部对象数组中增加一个对象。
[array addObject];
而销毁自动释放池也就是通过forin循环找到每一个数组的objc,并让其调用release方法。
2016 - 2 - 20 ARC知识总结(二 autorelease概念及实现)的更多相关文章
- Java JDBC的基础知识(二)
在我的上一篇Java JDBC的基础知识(一)中,最后演示的代码在关闭资源的时候,仅仅用了try/catch语句,这里是有很大的隐患的.在程序创建连接之后,如果不进行关闭,会消耗更多的资源.创建连接之 ...
- Stack Overflow 2016年度 20个最佳Python问题(一)
Stack Overflow 2016年度 20个最佳Python问题(一) https://zhuanlan.zhihu.com/p/25020763
- LeetCode刷题191130 --基础知识篇 二叉搜索树
休息了两天,状态恢复了一下,补充点基础知识. 二叉搜索树 搜索树数据结构支持许多动态集合操作,包括Search,minimum,maximum,predecessor(前驱),successor(后继 ...
- C#特性知识图谱-二、事件
C#特性知识图谱-二.事件 二.事件 在事件驱动的软件系统中,符合某种预设条件的情形出现是,一个事件就会被触发. 2.1 事件三要素 事件源:激发事件的对象 事件信息:事件本身说携带的信息 事件响应者 ...
- 2016 - 2 - 19 ARC内存管理知识总结(一,arc基本概念及alloc等方法的实现)
一. ARC的基本概念 1. 在objc中采用automatic reference counting 机制, 让编译器来进行内存管理.在降低程序崩溃,内存管理泄漏等风险的同时,很大程度减少了程序员的 ...
- 从零开始HTML(二 2016/9/20)
1.布局 ① 使用 <div> 元素的 HTML 布局,<div> 元素常用作布局工具,因为能够轻松地通过 CSS 对其进行定位. <!DOCTYPE html> ...
- 前端基本知识(二):JS的原始链的理解
之前一直对于前端的基本知识不是了解很详细,基本功不扎实,但是前端开发中的基本知识才是以后职业发展的根基,虽然自己总是以一种实践是检验真理的唯一标准,写代码实践项目才是唯一,但是经常遇到知道怎么去解决这 ...
- 前端基本知识(二):JS的原型链的理解
之前一直对于前端的基本知识不是了解很详细,基本功不扎实,但是前端开发中的基本知识才是以后职业发展的根基,虽然自己总是以一种实践是检验真理的唯一标准,写代码实践项目才是唯一,但是经常遇到知道怎么去解决这 ...
- 关于asyncio知识(二)
一.asyncio之—-入门初探 通过上一篇关于asyncio的整体介绍,看过之后基本对asyncio就有一个基本认识,如果是感兴趣的小伙伴相信也会尝试写一些小代码尝试用了,那么这篇文章会通过一个简单 ...
随机推荐
- Java_I/O输入输出_实现当用户输入姓名和密码时,将每一个姓名和密码加在文件中,如果用户输入done,就结束程序。
import java.io.*; public class Example { static final int lineLength = 81; public static void main(S ...
- BIND的进阶二:视图,日志,转发,子域的授权
实验分为4部分组成: 1:DNS的转发 2:DNS日志 3:子域的授权 4:智能DNS的简单配置根据网段来分配不同的ip地址 一:DNS的转发: 转发方式有两种:only (直接把客户端请 ...
- 简述linux的发行版,并描述不同发行版之间的联系与区别
bash命令行返回值和展开 标签(空格分隔): bash,命令,状态,展开 1.命令状态结果和执行结果 (1)命令执行的状态返回值,命令执行完成之后,其执行状态结果值保存于bash的特殊状态变量$?中 ...
- 将windows上的文件同步到linux上
1.首先下载PSCP.exe,下载地址:http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html 2.将PSCP.exe拷贝到C: ...
- 自己写的一个SqlHelper,感觉使用起来挺方便的
自己写的一个SqlHelper,感觉使用起来挺方便的 using System; using System.Data; using System.Collections.Generic; using ...
- WinDbg 蓝屏dump分析教程
一.WinDbg是什么?它能做什么? WinDbg是在windows平台下,强大的用户态和内核态调试工具.它能够通过dmp文件轻松的定位到问题根源,可用于分析蓝屏.程序崩溃(IE崩溃)原因,是我们日常 ...
- 好用的Magento一步支付插件One Step Checkout免费版
Magento免费版一步支付插件地址:http://www.magentocommerce.com/magento-connect/one-page-checkout.html 直接引用KEY:ht ...
- IE9,10中console对象的bug
首先上一段很简单的代码 <!DOCTYPE html> <html> <head> <title></title> <meta htt ...
- blade and soul zone overview
The world of Blade and Soul, is a vast extension of land containing two continents (the Southern Con ...
- 使用ASP.NET上传图片汇总
1 使用标准HTML来进行图片上传 前台代码: <body> <form id="form1" runat="server"> ...