symbian_os_c_程序员编码诀窍
### Symbian OS C++程序员编码诀窍#### 1.简介本资料专为使用C++语言为Symbian OS 6.x/7.0s开发应用程序的开发者设计,旨在解决开发过程中可能出现的20%关键问题,这些问题往往占据了项目后期修正工作的大约80%时间。 #### 2.内存管理##### 2.1清除堆栈(CleanupStack) **2.1.1所有程序都应检查“资源用尽”出错**在Symbian OS中,资源耗尽是常见的问题之一。当程序请求的资源(如内存)无法满足时,会引发错误。因此,每个程序都应该具备检查这类错误的能力,以确保系统的稳定性和可靠性。 **2.1.2传统的侦错方法**传统的调试方法通常涉及手动跟踪资源的分配和释放情况。这种方法虽然有效,但在大型项目中效率低下且容易遗漏。 **2.1.3使用传统方法的问题**传统方法的一个主要问题是,它们依赖于开发人员的手动干预来确保资源被正确地释放。这种方法不仅费时费力,而且容易出现疏漏,导致内存泄漏和其他资源管理问题。 **2.1.4 Symbian OS中的解决方案** Symbian OS提供了一种更为高效的方式来管理内存资源,即清除堆栈(CleanupStack)机制。这种机制可以帮助开发者自动管理资源,减少了资源管理上的复杂性。 **2.2规则1:异常退出函数和捕获模块** **2.2.1异常退出函数** Symbian OS中的异常退出函数是一种特殊的函数,用于在遇到错误时安全地清理资源并退出。这种方式可以确保即使在异常情况下,程序也能优雅地结束。 **2.2.2 `new(ELeave)`运算符** `new(ELeave)`是一种特殊的构造方式,用于在资源分配失败时抛出ELeave异常。这种异常处理机制可以确保资源在分配失败时被妥善清理。 **2.2.3 `NewL()`和`NewLC()`惯例** - **`NewL()`**:用于创建非临时对象,并且会在分配失败时抛出异常。 - **`NewLC()`**:用于创建临时对象,如果分配失败,则在退出块中进行清理。 **2.2.4 TRAP and TRAPD使用捕获模块** TRAP和TRAPD是两种捕获模块,用于处理Symbian OS中的异常。TRAP用于处理非致命错误,而TRAPD则用于处理致命错误。这两种机制都是为了确保程序能够正确处理异常,并在适当的时候释放资源。 ##### 2.3规则2:使用清除堆栈**2.3.1为何需要清除堆栈(CleanupStack)**清除堆栈机制是Symbian OS中的一个核心概念,它提供了一种自动管理资源的方式,确保在函数返回时所有的资源都被适当地释放。 **2.3.2使用清除堆栈**通过使用清除堆栈,开发者可以在函数的开头使用`User::LeaveIfError`来初始化清理操作,然后在函数内部使用`CleanupStack::PushL`来管理对象。当函数返回或抛出异常时,清除堆栈会自动调用`CleanupStack::Pop`来释放资源。 **2.4规则3:两阶段构造**在Symbian OS中,推荐使用两阶段构造来创建对象。第一阶段是创建对象本身,第二阶段是对对象进行初始化。这种构造方式有助于避免资源泄漏,并确保在构造失败时能够正确清理。 **2.4.1用`NewL()`和`NewLC()`实现两阶段构建**使用`NewL()`和`NewLC()`来实现两阶段构造,确保资源在分配失败时能够得到清理。 **2.5公共错误** **2.5.1误用TRAP和TRAPD**开发者有时会错误地使用TRAP和TRAPD,比如在不恰当的情况下使用TRAPD处理非致命错误。 **2.5.2错误使用了new运算符**使用标准C++中的`new`运算符可能会导致资源管理不当。在Symbian OS中,建议使用`new(ELeave)`或其他特定于Symbian的内存分配函数。 **2.5.3错误使用了后缀‘L’**在Symbian OS中,后缀‘L’用于标识常量字符串。错误地使用这个后缀可能导致不必要的资源消耗。 ##### 2.6内存泄漏**2.6.1使用WINS模拟器中的工具** Symbian OS提供了WINS模拟器,其中包含了一系列工具来帮助开发者检测和定位内存泄漏。这些工具对于确保程序的健壮性至关重要。 **2.7检查和严重提示(Asserts and Panics)**在开发过程中,使用断言(asserts)来检查程序的状态是非常重要的。当断言失败时,通常会导致程序崩溃,从而帮助开发者更快地找到问题所在。在Symbian OS中,还有一种更强大的机制称为“恐慌(panics)”,它用于在极端情况下报告错误。 #### 3.系统资源的使用(ROM和RAM) ##### 3.1重要性在移动设备上,ROM和RAM的空间非常有限,因此有效地利用这些资源是至关重要的。 ##### 3.2减少代码量**3.2.1不必要的导出函数**避免导出不必要的函数,因为这会增加程序的ROM大小。 **3.2.2复制和粘贴**尽量避免使用复制和粘贴来编写代码,因为这会导致代码重复,增加了ROM占用。 **3.2.3明显不可分解的函数**将大的函数分解成小的、可重用的部分,这样不仅可以减少ROM的使用,还可以提高代码的可读性和可维护性。 **3.2.4过分的TRAP模块**过度使用TRAP模块可能会导致额外的RAM消耗。 **3.2.5调试发行代码**在发布版本中不要保留调试代码,以减少ROM占用。 **3.2.6不必要的虚函数**虚函数会增加ROM和RAM的使用量,因此只在必要时使用。 **3.2.7使用公共控件**尽可能使用Symbian OS提供的公共控件,而不是自己实现相似功能的控件。 ##### 3.3减少使用RAM **3.3.1使用bitfields(位元组合),而不使用太多的Tbools**使用位元组合(bitfields)而不是布尔类型的变量(Tbool),可以减少RAM的使用。 **3.3.2阵列粒度的使用警示**避免使用过大的数组,特别是在RAM紧张的情况下。 **3.3.3避免全局数据**全局数据会占据大量的RAM空间,因此应尽量减少全局数据的使用。 **3.3.4小心基类的成员数据**基类中的成员数据也会占用RAM,因此要小心使用。 **3.3.5正确使用清除堆栈**正确使用清除堆栈机制,确保资源在不再需要时被及时释放。 **3.3.6尽早删除**一旦不再需要某些数据或对象,应立即删除它们,以释放RAM。 **3.3.7用最大数据集进行硬件测试**使用最大的数据集进行硬件测试,以确保程序在实际使用中最坏情况下的性能。 **3.3.8分解复杂的长运算**将复杂的长运算分解成多个简单的步骤,以减少RAM的使用。 ##### 3.4减少堆栈的使用**3.4.1正确使用描述符**合理地使用描述符,以减少堆栈的使用。 **3.4.2小心使用递归,在限度内生成**递归函数会大量使用堆栈空间,因此要谨慎使用。 **3.4.3注意登录代码**登录代码可能会增加堆栈的使用,特别是在多线程环境中。 **3.5盘容量降低的处理**当存储空间不足时,采取适当的措施来减少对磁盘的使用,例如缓存策略或数据压缩。本文档详细介绍了Symbian OS C++开发者在内存管理和资源使用方面的一些最佳实践。遵循这些准则可以显著提高程序的性能和稳定性,同时减少资源消耗。对于那些致力于为Symbian OS开发高质量应用程序的开发者来说,这些都是非常宝贵的指南。
379.76KB
文件大小:
评论区