symbian开发介绍: symbian操作系统与普通pc的不同是: symbian上内存不够多 ,并且cpu速度慢,所以开发的话需要考虑到节省内存的原则 另外就是分配内存失败时的处理 在这点pc基本上不用考虑 因为有真实内存加上虚拟内存 够用的 symbian操作系统可能运行好几个月 但是你的程序随时可能因为异常而退出 退出时释放程序使用的内存及其它相关资源就相当重要 界面开发最简单的方法是使用c++ 把相关的图形操作使用类来封装,所以symbian的sdk以c++ 类库形式提供 如果你还是使用c 那还是赶紧学习c++
由于symbian运行的环境有限,所以为了提高性能减少资源使用 symbian对标准c++进行了一定的修改,其中最明显的是去掉了异常处理机制
另一个就是对模板进行了简化 当然模板方面在语言开发中不会有不同 只是修改了它的实现 这个可以不用管 只是像c++中的模板一样使用好了
symbian在语言级不支持异常,但是以库与宏的形式来提供对导常的支持 throw 对应于 User::Leave或是leave相关函数 try{}catch(...){}对于于TRAP和TRAPD宏 TRAPD宏与TRAP只是增加了变量定义过程 这两个没有区别
另外 由于资源有限,所以有些程序可能因为不正常的使用资源而死掉 或是因为资源使用完而无法正常执行 这时 虽然可以自己增加错误处理过程 但是这样的过程太多了 如内存分配 每次分配完 都要检查是不是成功 没有成功就释放资源程序退出 这样代码量就很大 而在实时系统中 需要的是代码少而精 所以 symbian提供了cleanupstack(清除堆栈)机制 当你申请了资源后 把它Push到cleanupstack中 那后面如果某个申请失败了 可以直接调用User::Leave退出程序 操作系统会自动帮你释放你申请的资源 这样代码量就减少 如果已经成功的使用完资源了 需要自己释放 那就调用PopAndDestroy手动释放它 为了保证程序退出时用户申请的资源全部释放(主要是内存) 所以symbian同时提供了heap marking机制,程序开始时标记当前堆信息 退出时检查并释放没有释放的堆 总之就是symbian开发中需要自己处理下面的事情: trap harness,cleanup stack,leave,heap marking
其实跟c++比起来 symbian对释放资源的操作通过cleanupstack进行了支持 只是需要自己手动的把资源放到cleanupstack中 这样可以认为是c++的手动管理资源与java的自动资源管理的一个折中 第一个控制台下的hello world程序 很多语言都是从hello world 开始 学习symbian也不例外 下面从一个简单的hello world程序开始 介绍symbian的特点 CODE //hellotext.cpp #include #include LOCAL_D CConsoleBase* gConsole; // Real main function void MainL() { TBuf helloWorld(_L("hello")); helloWorld.Append(_L("World")); gConsole->Printf(helloWorld); // 可以把上面三句改成gConsole->Printf(_L"hello world"); } // Console harness void ConsoleMainL() { gConsole = Console::NewL(_L("Hello Text"), TSize(KConsFullScreen,KConsFullScreen)); CleanupStack::PushL(gConsole); MainL(); User::After(5000000); CleanupStack::PopAndDestroy(gConsole); } GLDEF_C TInt E32Main() { __UHEAP_MARK; CTrapCleanup* cleanupStack = CTrapCleanup::New(); TRAPD(error,ConsoleMainL()); __ASSERT_ALWAYS(!error,User::Panic(_L("SCMP"),error)); delete cleanupStack; __UHEAP_MARKEND; return 0; }
|