首页 / 知识
关于C#:NSAutoreleasePool自动释放池如何工作?
2023-04-15 12:20:00

How does the NSAutoreleasePool autorelease pool work?据我了解,使用alloc,new或copy创建的任何内容都需要手动释放。 例如:
我的问题是,这样难道不是同样有效吗?:
是的,您的第二个代码段是完全有效的。 每次将-autorelease发送给对象时,都会将其添加到最内部的autorelease池中。当池耗尽时,它仅向池中的所有对象发送-release。 自动释放池只是一种便利,它使您可以将发送-释放推迟到"以后"。"后期"可能会在多个地方发生,但是在Cocoa GUI应用程序中最常见的是当前运行循环周期的结尾。 NSAutoreleasePool:消耗与释放
由于
严格来说,从大角度看,
在引用计数的环境中,
在垃圾回收的环境中, 如前所述,您的第二个代码段是正确的。 我想提出一种使用自动释放池的更简洁的方法,该池适用于所有环境(引用计数,GC,ARC),并且还可以避免浪费/释放混乱:
在上面的示例中,请注意@autoreleasepool块。在此处记录。 不你错了。该文档明确指出,在非GC环境下,-drain等效于-release,这意味着NSAutoreleasePool将不会泄漏。 向对象发送自动释放而不是释放,至少可以延长该对象的寿命,直到耗尽池本身为止(如果随后保留该对象,则可能会更长)。一个对象可以多次放入同一个池中,在这种情况下,每次将对象放入池中时都会收到释放消息。
我从苹果那里读到的东西: https://developer.apple.com/library/mac/documentation/cocoa/conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html
是的,没有。您最终将释放字符串内存,但是如果在垃圾回收(非内存托管)环境下运行NSAutoreleasePool对象,则使用排水而不是释放将NSAutoreleasePool对象"泄漏"到内存中。此"泄漏"仅使NSAutoreleasePool的实例像其他任何在GC下没有强指针的对象一样"不可访问",并且该对象将在下次GC运行时被清除,这很可能直接在调用
否则,它类似于 我应该指出,您的语句"用new,alloc或init调用的任何内容"都不应包含" init"(但应包含" copy"),因为" init"不分配内存,它只会设置对象(构造函数)时尚)。如果收到分配对象并且函数仅这样调用init,则不会释放该对象:
这不会消耗比您开始时更多的内存(假设init不会实例化对象,但是无论如何您都不会对这些对象负责)。 |
最新内容
相关内容
linux命令创建用户组?
linux命令创建用户组?,系统,代码,密码,用户组,用户,命令,信息,名称,新增,管理,Linux中如何创建用户和用户组linux一条命令不能创建多个用户组linux创建主机名命令?
linux创建主机名命令?,工作,地址,系统,信息,名称,命令,目录,发行,查询系统,网络,linux常用的命令有哪些1、linux系统常用操作命令如下:ls:全拼lilinux控制台创建命令?
linux控制台创建命令?,工作,地址,系统,命令,信息,目录,管理,名字,文件,控制台,linux基本操作命令1、linux常用命令有pwd命令、cd命令、ls命令创建自定义命令linux?
创建自定义命令linux?,工具,状态,命令,系统,代码,标准,数据,位置,电脑,材料,LINUX中,创建文件夹、文件命令及清除命令。1、创建文件夹mkdir命linux命令如何创建与?
linux命令如何创建与?,名字,文件,命令,名称,系统,密码,首次,文件名,终端,文件夹,创建文件linux命令创建文件夹使用【mkdir x】命令;创建文件使linux下创建网络命令?
linux下创建网络命令?,网络,地址,工作,系统,管理,命令,名字,最新,项目,设备,linux笔记本怎么建立wifi啊?首先,查看对应的PCI设备,可以看出,我的无linux命令创建项目组?
linux命令创建项目组?,管理,密码,项目,命令,系统,位置,文件,用户组,用户,文件夹,linux命令中用root用户新建一个user1用户,新建一个group1的组linux的创建目录命令?
linux的创建目录命令?,名字,地址,位置,密码,软件,系统,命令,目录,文件夹,文件,请问LINUX中,创建文件夹、文件命令及清除命令。1、创建文件夹mklinux创建端口命令?
linux创建端口命令?,系统,网络,服务,通讯,检测,工具,端口,电脑,命令,以下,Linux中如何添加一个新的端口号1、修改Linux远程端口的方法如下:首先linux创建内容的命令?
linux创建内容的命令?,名字,文件,命令,密码,时间,系统,文件名,终端,目录,文件夹,linux怎么创建文件终端下键入:touch加文件名,这样就创建了一个linux释放权限的命令?
linux释放权限的命令?,系统,档案,代码,地址,密码,命令,管理,工具,工作,简介,Linux用户以及权限相关常用命令总结1、sudo和su类似,有一些附加的linux下文件创建命令?
linux下文件创建命令?,名字,名称,首次,命令,文件,系统,密码,文件名,文件夹,目录,Linux虚拟机命令如何创建新的文件和文件夹首先,连接相应linux