`
java-mans
  • 浏览: 11434406 次
文章分类
社区版块
存档分类
最新评论

危险的NSAutoreleasePool

 
阅读更多

NSAutoreleasePool作为object-c的提供的半自动化内存管理机制确实简化的维护。

object-c实现的内存管理机制是基于计数器的,类似于COM的对象维护机制。本身来所这种管理机制效率是很高的。与java和.net的自动化的三级内存管理机制相比,自动化差了些,但是性能和资源利用率确是其无法比拟的。个人认为在不同量级的应用中以引用计数器进行内存的版自动化管理是一种不错的选择。

以上这是背景,在NSAutoreleasePool对象声明和release之间是pool的管理区域,当release时pool将自动清理这个区域内声明在堆上的内存。请注意这里他会把这个区域内认为无用的内存自动清理掉,而不需要你自己release。一般的基础类型是初始化在栈上,我们不做考虑,对象类型由于我们更多的作为一个操作单元,没有太多的跨作用域的引用的情况,一般不会有太多的问题。问题回到字符串类型上面来,object-c支持的字符类型有char,char[],char*,string,NSString,NSMutableString等,char,char[]初始化在栈上,不做考虑。其他几种形式都是对char的一种封装,初始化在堆上。对于指针对象的复制一般从效率上来考虑都是浅拷贝的,只是把一个地址指针付过来,并没有真正将区域内的数据拷贝。这就产生了一个问题,这些数据会在系统认为原来的对象没有用处的时候给清理掉,而新的对象还在指向原始的位置,现在对这个对象进行操作将会产生非常严重的后果。虽然我们可以采用retain机制将对象引用计数器加1,但是无法在releas时确切的知道系统是不是会自动化的给清理掉,并且似乎这个时候系统往往会清理掉。如果我们在这个区域里操作全局的字符串对象进行操作,会是很危险的事情。

分享到:
评论

相关推荐

    c-autoreleasepool:NSAutoreleasepool 为大家服务!

    尝试将 NSAutoreleasepool(或 @autoreleasepool{...})从 Objective-C 和 Cocoa 中完全用 C 实现到 C 语言中。 我认为这对某人有用并在周末左右实施。 我还没有找到任何可比较的项目,但如果你有更好的项目,请告诉...

    ob<x>jective-C学习资料汇总专题

    资源名称:Objective-C学习资料汇总专题资源目录:【】Objective-C NSAutoreleasePool【】Objective-c 中 nil, Nil, NULL和NSNull的区别【】Objective-C 中self 和 super【】Objective-C 的编程之道【】Objective-C_...

    iOS-interview-preparation:iOS开发人员面试准备指南

    什么是NSAutoreleasePool和自动发布? 有哪些保留周期和最佳实践来避免它们? 在什么情况下应用会因EXC_BAD_ACCESS错误而崩溃? 推荐阅读: 自动版面 多任务-GCD,NSOperations等 设计模式-委派,单例,块等 ...

    (更新至2022年)城镇男性就业人员调查周平均工作时间.xls

    数据来源:中国人口与就业统计NJ-2023版

    各地区技工院校综合情况(2022年).xls

    数据来源:中国劳动统计NJ-2023版

    基于matlab实现样本熵算法,可用于提取生理信号的特征参数

    基于matlab实现样本熵算法,可用于提取生理信号的特征参数,运算速度较快,m=1或2;r=0.1_std(data)~0.25_std(data)最佳。.rar

    蜂网-SCM车销访销业务.pptx

    蜂网_SCM车销访销业务.pptx

    数据更新至2020年国民经济主要指标一览表.xls

    数据来源:中国电力统计NJ-2021版

    图书借阅管理系统设计与实现及论大学生写作能力.docx

    图书借阅管理系统设计与实现及论大学生写作能力.docx

    node-v10.19.0-linux-armv6l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    商品零售价格分类指数(2022年)(上年=100).xls

    数据来源:中国劳动统计NJ-2023版

    数据更新至2020年电网建设 本年开工规模.xls

    数据来源:中国电力统计NJ-2021版

    基于数据服务的信息需求管理系统设计与实现.docx

    基于数据服务的信息需求管理系统设计与实现.docx

    基于matlab实现的多个无人机的群飞行仿真 多个无人机的群飞行仿真.rar

    基于matlab实现的多个无人机的群飞行仿真 多个无人机的群飞行仿真.rar

    #-001-mysql-快递管理系统ssm(毕设和论文)

    随着物流行业信息化的深入使得物流过程中货物的状态和变化透明化,现代信息化的接入使得物流成本和费用的更容易被掌握,从而增强了信息的准确性。与此同时动态信息能够被及时掌握,根据实际情况做出快速而有效的反应,实现物流运作的动态决策。信息的及时、全面的获取与加工,供需双方可以充分的信息共享与沟通,使得物流服务更准确、从而提高客户的满意度;同时顾客可以有更多自我服务功能,可以随意定义自己的定制的物流服务;另外在提供物流服务的同时,可以为顾客提供信息、资金等双赢的增值服务。 该系统用spring mvc和MySQL实现了快递管理系统。快递管理系统有着很好的应用前景,随着计算机技术和网络技术的发展,它的功能将会得到不断的发展和完善。本系统可以根据实际应用的具体情况,适当加以修改,以便更好应用。本系统操作简单,灵活性好,系统安全性高,运行稳定。本文详细介绍了快递管理系统开发和设计的全过程。

    各地区分行业其他单位就业人员和工资总额(2022年).xls

    数据来源:中国劳动统计NJ-2023版

    node-v11.14.0-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于VB实现的医疗纠纷检索系统设计(源代码+系统).zip

    【作品名称】:基于VB实现的医疗纠纷检索系统设计(源代码+系统) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。

    数据更新至2020年分布式太阳能发电情况.xls

    数据来源:中国电力统计NJ-2021版

    node-v11.3.0-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics