探究symbian 资源管理和独特的异常处理机制

探究symbian 资源管理和独特的异常处理机制

ID:15337676

大小:28.51 KB

页数:20页

时间:2018-08-02

探究symbian 资源管理和独特的异常处理机制_第1页
探究symbian 资源管理和独特的异常处理机制_第2页
探究symbian 资源管理和独特的异常处理机制_第3页
探究symbian 资源管理和独特的异常处理机制_第4页
探究symbian 资源管理和独特的异常处理机制_第5页
资源描述:

《探究symbian 资源管理和独特的异常处理机制》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、探究Symbian资源管理和独特的异常处理机制移动应用开发1班孙凯彬19探究Symbian资源管理和独特的异常处理机制摘要本文通过比较SymbianOSC++与标准C++在异常处理机制上的差异,分析了SymbianOS如何分配和管理资源,以应对因程序员忘记回收或者异常所可能引发的资源泄漏问题。本文主要深入探讨了以下三方面的内容:SymbianOSC++为何要采用特殊的的异常退出/捕获机制,当异常发生时清除栈机制如何管理资源,以及Symbian提倡使用两阶段构造(Two-PhaseConstruction)的原因。最后,根据可移植性的要求,介绍了使用自定义智能指针来代替清除栈的实

2、现方法。关键词:SymbianOS资源管理;异常处理;清除栈;两阶段构19目录引言……………………………………………………………………………………………3一、Symbian中的资源管理……………………………………………………………3二、清除栈……………………………………………………………………………………4三、异常处理…………………………………………………………………………………8四、类的二阶段构造………………………………………………………………………16结束语…………………………………………………………………………………………19参考文献…………………………………………………

3、…………………………………1919探究Symbian资源管理和独特的异常处理机制引言一个运行良好的程序,除了能够实现所有的功能外,还要有好的容错能力,才能给用户提供好的人机交互,能用程序实现功能是开发的根本,良好的容错、异常处理及有效的资源处理机制是对产品品质的提升。在Symbian系统中处理异常的方法与传统的标准C++中的try,catch机制有很大的不同。Symbian系统提供了一些特殊的清理机制来解决这个问题。系统提供了TRAP/TRAPD宏、CleanupStack类以及一些约定俗成的方法(例如Leave函数,这些在我们了解了系统的清理机制以后就会清楚它们的工作原理了)

4、。本文主要阐述了Symbian中特有的资源管理及异常处理机制一、Symbian中的资源管理如果在一个有充足的内存、充足的硬盘空间、充足的外部设备等资源丰富的系统上开发应用,那将是一件快乐的事,开发者只要把所需的功能实现,程序节能运行的非常好。事实上,这样的19系统几乎不存在,开发程序过程中总是会遇到各种各样的问题。资源管理的一个重要方面就是防止资源泄漏。资源泄漏是指在程序中分配了资源,使用完毕后却没有相应地释放该资源,结果导致该资源一直被占据,直到程序结束。SymbianOS在设计支出,就以手持式通信设备为目标,考虑了如何能够在较少的资源还是那个有效地运行系统,给应用开发者提供

5、了不同于其他操作系统过的API,能够进行有效的内容管理,提供了防止内存泄漏资源管理方式,这在其他的寓言开发是从来没有过的。Symbian通过3种方式-----清除栈机制、异常退出处理和类的二阶段构,来提高程序容错性,增加程序的稳定性。一、清除栈(一)清除栈的创建GUI应用程序或服务器程序不需要创建清除栈,因为在这两种程序中清除栈的创建都是框架代码的一部分。但如果是编写简单的控制台测试程序或是创建一个分离的线程,而且又需要使用清除栈或调用使用了清除栈的代码,就需要自己分配一个清除栈。清除栈被创建时,默认在内存中一次分配4个空余位置。这些空余位置保留作为PushL函数压入对象的指针

6、。所以,PushL函19数是可以异常退出的,无需担心异常退出发生时已压入的对象被遗弃,因为退出时传递的指针已经被安全地保存下来,它所指向地对象也会被安全地清除掉。(二)清除栈机制与原理每个手机的应用程序都仅拥有一个清除栈。清除栈是个全局变量。把指针对象压入清除栈,如果函数正常执行则将前面压入的指针对象从清除栈中弹出,并由函数销毁指针对象的空间。如果函数无法正常执行,则可以在函数的外部将异常捕获,因为清除栈是个全局变量,所以函数的外部也可以访问清除栈,并将清除栈中的指针对象弹出并释放。原理:把函数内部的局部变量压入清除栈,因为清除栈是应用程序的全局变量,所以函数外部可以通过清除栈

7、获取到函数内部的局部变量,并通过一系列的方法把局部变量所占用的堆空间释放掉。清除栈保存了一组指向那些需要被销毁的对象的指针。在清除栈被创建的时候,会创建一个名为iHandler的TCleanupTrapHandler类对象,它持有一个包含实际清除栈实现代码的CCleanup对象,当异常退出发生时,将调用CCleanup对象,清除保存在清除栈上的对象。利用清除栈实现异常退出安全的代码如下:CUseClass*test=newCUseClass;CleanupStack::PushL(test)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。