浅谈IOS内存开发管理机制的应用

2016-07-13 07:58肖斯瑶
大科技 2016年36期
关键词:计数器所有权管理机制

肖斯瑶

(湖南省长沙市长郡中学 410002)

浅谈IOS内存开发管理机制的应用

肖斯瑶

(湖南省长沙市长郡中学 410002)

ios是苹果公司的主流操作系统,在目前网络发展的背景下,ios的开发一直是业界研究的热点。本文主要针对ios内存开发管理机制的应用进行分析。

ios系统;内存开发管理机制;应用

ios是苹果公司的操作系统,来开发某些移动设备软件所使用的。许多ios开发出来的软件都是因为内存的泄露而崩溃,再加上移动设备本身内存有限,内存管理在ios开发中极为重要。所以了解ios内存开发管理机制对于开发者来说是非常有必要的。

1 内存管理中的所有权策略

任何对象的存在都不能离开其所有者单独存在。如果没有所有者,该对象就会被判断为无效对象,被系统销毁。为了明确对象的所有权义务,苹果公司创建的编程环境Cocoa设立了一系列的判断准则:

(1)所有权不是任何一个对象都能有的,它是需要一定条件的,最主要的是要对对象执行retain、new等操作,才能获得其所有权。

(2)不要只是获得所有权却不释放,如果不再需要某个对象的所有权,要及时释放。可以通过release或者autorelease来实现所有权的释放。

(3)如果没有该对象的所有权,那么就不能对其实行释放所有权操作。

2 保留计数机制

所有权策略是在调用retain方法后通过保留计数实现的。每个对象创建完成后,为了记录其所有权个数,系统会自动生成一个计数器供其使用,并且用此计数器管理对象的内存。当一个对象创建完成,计数器值等为1;将release消息发送给对象,计数器值减1;将retain消息发送给对象,计数器值加1;将autorelease消息发送给对象,在某个阶段上计数器的值减1.若计数器值等于0,那么就会释放该对象的内存。这些工作都是由一个名为dealloc的函数来执行的,每个对象都会有这样一个方法。

3 ios内存释放的一般规则

(1)如果对象是通过copy、new等关键字创建的,并且其保留计数器值为1,则当再想使用该对象时,一定要向对象发送一条autorelease或release消息以便当该对象寿命结束时将其进行销毁。

(2)如果对象是通过其他方法创建的,并且计数器保留的值为1,与此同时将其设置为自动释放,要想一段时间内一直拥有这个对象,就必须想法保留住这个对象并且在操作完成时还要完成释放。

(3)已经确定要保留某个对象,那应该考虑如何对其释放。若想将保留下来的对象释放,必须坚持release和retain的方法,并保持相同的使用次数。

4 自动释放池的作用及使用场景

自动释放池其实就是一个用来实现内存自动回收的盛放对象的池子,它是NSAutoreleasePool的实例,它里面既包含自身定义的对象还包含接收到autorelease指令的对象。当自动回收池将被回收删除时,它会给里面的每个对象都发一条release消息,其他情况还会一直保留着对象,这样就会将对象的生命周期延长至自动释放池自身被释放。如果释放池被删除导致对象没有了可用的释放池,Cocoa还会记录下相应的autorelease异常。

盛放自动释放池的是一个一个的堆栈。栈顶存放的是新创建的自动释放池,接收到autorelease消息的对象会被添加到栈顶的自动释放池中,当释放池被回收或者不能用时,就会被堆栈自动删除。

大部分情况,程序的开发应用的是应用系统的开发包自带的自动释放池,但是以下情况,自带的自动释放池不能起到回收的作用,必须要使用自己的自动释放池:

(1)程序编写的方式不是用基于应用系统而开发出来的,比如通过命令行工具进行编写的程序,它当然不能用应用系统的内置自动释放池,必须自己建造自己的自动释放池。

(2)如果生成一个从属线程,当线程开始执行,就必须创建自己自动释放池,因为在线程内创建的对象并不会在函数结束后自动释放。

(3)如果很多对象被创建在一个循环里,最好在循环体内部创建一个自动释放池以便于减少程序的最大内存占用量。

5 内存管理中常见的错误

在这里主要介绍iPhone开发中内存管理常见的错误。

没有使用存取方法。没有存取方法的程序在一些简单的情况下可以正常运行,但是当忘记了释放或保留时或者当实例变量的内存管理语义发生错误时,如果没有存取方法,程序就会发生错误。

内存泄露。当对象的保留计数器值为1,并且在方法释放的作用域内没有对应的release时,对象就不会被自动释放池释放,最后导致泄露内存。

释放没有所有权的对象。如果释放的是没有所有权的对象,会发生过度释放的错误。

6 结束语

本文主要对影响ios内存的几个重要方面进行了阐述,着重剖析了内存管理中难以理解以及容易混淆的部分,并归纳总结了ios开发中常见的内存管理的错误以及规则。最后达到了初步了解ios内存开发的管理机制的目的。

[1]李蕾,李晓丽.基于IOS手持终端的移动学习资源设计研究[J].中国电化教育,2014(12).

[2]盛平,严冬,张德勤.基于IOS平台的智能视频系统客户端设计与实现[J].软件导刊,2015(07).

[3]段艳艳,赵启升.基于IOS的O2O商务平台设计与实现[J].泰州职业技术学院学报,2014(03).

[4]孙晓文.IOS与Android操作系统的优缺点比较[J].无线互联科技,2013(12).

TN929.5

A

1004-7344(2016)36-0269-01

2016-11-2

猜你喜欢
计数器所有权管理机制
采用虚拟计数器的电子式膜式燃气表
试论工程造价管理机制的完善与创新
商品交换中的所有权正义及其异化
建立有效的管理机制奠定坚实的人力资源基础
关于软科学质量管理机制的问题探讨
工电道岔结合部联合管理机制的探讨
动产所有权保留
日本法中的所有权保留
计数器竞争冒险及其处理的仿真分析
任意N进制计数器的设计方法