symbian 开发诀窍大放送
2010-02-23 16:06:00 来源:WEB开发网例如:把一个栈变量传送到一个异步函数的回调(callback) 里。在系统资源不够的情况下,得体的处理失效情况是非常重要的。最受限制的资源通常是系统RAM,因此您需要注意正确的处理内存不足的情况。采用‘两段构造方法’和如下所述的CleanupStack 机制,对这种防御性编程来说是必不可少和极其重要的。
7. 对带“R”字头、具备Close()方法的类,总是使用CleanupClosePushL()。这将确保当Leave 事件发生时,它们会被恰当的清除。例如:
RFile file;
User::LeaveIfError(file.Open(…));
CleanupClosePushL(file);
…
CleanupStack::PopAndDestroy(&file);
对用Release()或Destroy()的‘R’ 类,亦可使用
CleanupDeletePushL()及
CleanupReleasePushL()来取代Close()。
8. 另外,请记住CleanupStack 机制是可扩展的,面对所有Leave 事件,都可以用它来有效的清除任何对象。即使您需要处理的是较复杂的情况,也不应该忽略采用正规的清理机制。欲进一步了解TCleanupItem,请参阅Symbian OS Library 文档。
9. 倘若您意图对HBufC 变量重新分配资源,在清除它们之后,总是将其设为NULL。由于HBufC 的资源分配或其再分配可能会导致Leave 事件的发生,从而可能会出现析构函数试图删除已经不存在的HBufC变量的情况。当然,对于任何由堆分配资源的变量而言都应如此,对HBufC 变量采取此做法更是已经成为普遍的使用模式。
10. 当必须采用自己的TRAP 时,请勿忽略所有的报错。
常见的编码错误是:
TRAPD(err, DoSomethingL());
if (err == KErrNone || err ==KErrNotFound)
{
// Do something else
}
这意味着其他错误码都被忽略。然而,倘若您非用上述模式不可,应采用Leave 机制来处理其他错误:
TRAPD(err, DoSomethingL());
if (err == KErrNone || err ==KErrNotFound)
{
// Do something else
}
else
User::Leave(err);
11. 不要延误将对象PushL()到CleanupStack 上。所有新创建的对象(成员变量除外)应被立即压入该堆
栈。例如,下面的作法是错的:
void doExampleL()
- ››开发Android 日历教程
- ››开发学院总结 Win 8实用技巧大全
- ››开发学院原创教程:把win8的IE10放桌面上方法(非...
- ››开发者眼中的Windows Phone和Android
- ››Symbian S60 SocketConnection参数
- ››开发学院教你用SQL 语句最快速清空MySQL 数据表的...
- ››Symbian乏力:2010年诺基亚悲情大事记
- ››Symbian三大升级开启2011年新战略
- ››Symbian/Android/iOS/WM安装包对比
- ››Symbian一个活动对象的测试例子
- ››Symbian ListBox控件
- ››Symbian下自动切换SDK的批处理代码
更多精彩
赞助商链接