NSAutoreleasePool 随笔

简介: NSAutoreleasePool是一个存放对象的集合,添加到NSAutoreleasePool的对象能够被自动释放。自动释放其实就是在NSAutoreleasePool被清空或是销毁时向池里所有的对象发送一条release消息。

NSAutoreleasePool是一个存放对象的集合,添加到NSAutoreleasePool的对象能够被自动释放。

自动释放其实就是在NSAutoreleasePool被清空或是销毁时向池里所有的对象发送一条release消息。

对象不会自动入池,只有当对象发送一条autorelease消息时才会被添加到当前的池中。可以想象池在一个栈中,当前池在栈顶,每创建一个新的池,就压入,使用drain或者release时,就弹出。

当有对象是Autorelease的对象,而当前没有NSAutoreleasePool的话,就会提示内存泄漏(Just Leaking)。一般来说,只要不是用new、alloc、copy方法创建一个对象的话,我们就假设该对象的引用计数为1,而且被添加到NSAutoreleasePool中。

如下面代码就会提示内存泄漏:

NSDate *date = [NSDate date];
NSLog(@"%@",[date description]);
return 0;
/*
 objc[3466]: Object 0x1001149c0 of class __NSDate autoreleased 
 with no pool in place 
 - just leaking - break on objc_autoreleaseNoPool() to debug
*/

关于drain和release的问题可以在此处找到说明。在非GC环境下,两者的作用是相同的。否则你没有理由去使用release,给NSAutoreleasePool发送drain会提醒GC处理池中的对象。

目录
相关文章
|
算法 数据可视化 安全
《统计学简易速速上手小册》第6章:多变量数据分析(2024 最新版)
《统计学简易速速上手小册》第6章:多变量数据分析(2024 最新版)
146 1
|
数据挖掘 项目管理 数据库
用语雀数据表做项目管理
项目管理是技术同学经常会面临的课题,有没有什么轻量级的工具可以便捷使用呢? 且看看科技公司项目经理的实践案例吧~
|
8月前
|
存储 人工智能 数据管理
媒体声音|专访阿里云数据库周文超博士:AI就绪的智能数据平台设计思路
在生成式AI的浪潮中,数据的重要性日益凸显。大模型在实际业务场景的落地过程中,必须有海量数据的支撑:经过训练、推理和分析等一系列复杂的数据处理过程,才能最终产生业务价值。事实上,大模型本身就是数据处理后的产物,以数据驱动的决策与创新需要通过更智能的平台解决数据多模处理、实时分析等问题,这正是以阿里云为代表的企业推动 “Data+AI”融合战略的核心动因。
|
机器学习/深度学习 TensorFlow 算法框架/工具
|
设计模式 JavaScript 前端开发
Vue3报错Property “xxx“ was accessed during render but is not defined on instance
Vue3报错Property “xxx“ was accessed during render but is not defined on instance
|
Python
又再肝3天,整理了65个Matplotlib案例,这能不收藏?
又再肝3天,整理了65个Matplotlib案例,这能不收藏?
224 0
|
Ubuntu Linux 虚拟化
如何实现VMware下Ubuntu系统和Windows系统文件之间的复制和粘贴?
解决办法非常简单,只需要在虚拟机上安装一下VMware Tools即可。 第一步,打开虚拟机(我使用的虚拟机是ubuntu-16.04-desktop-amd64) 第二步,点击 VMware菜单栏 中的 虚拟机 --> 安装VMware Tools。
3999 0
|
存储 算法 C++
C/C++顺序栈和链栈详解(附代码)
C/C++顺序栈和链栈详解(附代码)
576 0
|
前端开发 算法 JavaScript
带你读《2022技术人的百宝黑皮书》——在阿里做前端程序员,我是这样规划的(1)
带你读《2022技术人的百宝黑皮书》——在阿里做前端程序员,我是这样规划的(1)
211 0
|
存储 UED
无影云桌面使用感受
无影云桌面使用感受,我是使用过程中一点体会和想法
3422 3
无影云桌面使用感受