学习Symbian的基本概念
pstack中的东西销掉。这样就方便了很多。
一般的代码类似于:
CMyCls * mc=new (ELeave) CMyCls;
CleanupStack::PushL(mc);
me->doSth1L();
me->doSth2L();
CleanupStack::PopAndDestroy();
一般我们是将局部变量用cleanupstack来保护一下,但是对于类的成员变量则不能这样做(否则会二次销毁,产生严重错误)。
此外,在pop时超出范围了,压几个就弹几个,如果不小心把其它的内容给弹出来,也可能会引起严重错误的。所以,Pop有一个重载Pop(3,pA)这里表示弹出三个对象并且比较一下最后出栈的是不是pA。
四、两阶段构造
一般Symbian的类不会提供public的构造函数(不建议这么做),因为它提倡所谓的“两阶段构造”方法。定义为:
A)构造函数是protected或者privted的,并且不能包含引起Leave的操作。
B)实现两个静态函数NewL和NewLC,来代替构造函数提供给用户使用。
C)实现一个ContructL函数实现第二阶段的构造,其实大多数初始化的工作可以放在这里进行。
两阶段构造的代码相当地格式化了,比如两个静态函数NewL和NewLC的代码一般是这样的:
CMyClass * CMyClass::NewL()
{
CMyClass * self=NewLC();
CleanupStack::Pop();
return self;
}
CMyClass * CMyClass:NewLC()
{
CMyClass * self = new(ELeave) CMyClass;
CleanupStack::PushL(self);
self->ContructL();
return self;
}
而在ContructL中一般可以做一些真正的构造函数里的操作,例如分配内存、创建窗体之类的活儿。
五、命名规则
这也是一个需要注意的地方,按教材上所言列举如下:
类的名称前缀有T、C、M和R四个,分述如下:
T表示基本类,它位于栈里,就当作是一个结构吧。
C表示常规的类,继承于CBase的,这是C++标准的类的概念,所以有构造要析构。
M表示是一个接口,很好理解,它肯定含有纯虚函数。
R表示是一个系统资源,比如文件、网络等等,所以它肯定有Open有Close。
还有,K开头表示常量、E开头表示枚举也要记得。
形参用a开头,类成员变量用i开头,这此规则我们在自动生成的代码中也能看到。
还有函数的命名上也有讲究,不过不是开头而是结尾:象L表示可能会有Leave,LC表示不但可能有Leave而且它会被自动放在CleanupStack中。
还有两个二阶段构造又有三个函数名称固定了:NewL、NewLC和ContructL。
Symbian 相关文章:
- 手机操作系统Symbian系介绍(05-23)
- Symbian 摄像头编程预研(10-08)
- symbian 术语表(10-10)
- Symbian 入门(09-12)
- SYMBIAN 字符串操作(09-12)
- 什么是Symbian(09-12)