我编写了一个具有许多自定义视图的应用程序,通常会绘制很多行和位图.由于性能对应用程序来说有点关键,我花了很多时间来优化绘图性能.
现在,活动监视器告诉我,我的应用程序通常使用大约12%的CPU和仪器(分析器)表示花费了大量10%的CPU objc_msgSend(主要用于绘制相关的系统调用).
一方面,我很高兴这一点,因为这意味着我的绘图速度和它的速度一样快,我的优化也取得了巨大的成功.另一方面,它似乎意味着仍然使用我的CPU的唯一事情是messages(objc_msgSend)的Objective-C开销.因此,如果我在Carbon中编写应用程序,那么它的性能将会大大改善.
现在我很想得出结论,Objective-C是一种表现不佳的语言,尽管Cocoa似乎效率非常高,因为它显然可以比Objective-C发送消息更快地绘制.
那么,Objective-C真的是一种表现不佳的语言吗?你觉得怎么样?
我在C++中编写了一个很好的小数组类,用于void*保存其条目.
现在,我想让它使用模板.这是我的新标题:
template <typename T>
class SimpleArray
{
public:
SimpleArray();
~SimpleArray();
void SetEntry(int idx, T setEntry);
T GetEntry(int idx);
// and so on
protected:
T *pData
short iNumEntries;
}
Run Code Online (Sandbox Code Playgroud)
这些函数在不同的文件中实现,如下所示:
#include "SimpleArray.h"
template <typename T>
void SimpleArray<T>::SetEntry(int idx, T setEntry)
{
// code here
}
template <typename T>
T SimpleArray<T>::GetEntry(int idx)
{
// more code here
}
Run Code Online (Sandbox Code Playgroud)
这编译很好,但是当我想在其他一些代码中使用它时
SimpleArray<SomeType*> cache;
cache.SetEntry(0, someThing);
Run Code Online (Sandbox Code Playgroud)
我收到一个链接器错误,声明有一个 unresolved external symbol
2> Thing.obj:错误LNK2019:未解析的外部符号"public:bool __thiscall SimpleArray :: SetEntry(int,class someThing*)"(?SetEntry @?$ SimpleArray @ PAUsHandle @@@@ …
我在Qt中编写了一个向导式应用程序,它使用QStackedWidget来组织向导的各个页面.现在我想在页面之间切换,这应该是可以使用的功能setCurrentWidget(...):
我有一个简单的主类来实例化QWidget audioconfig.然后,它将此QWidget添加到QStackedWidget pageStack使用pageStack.addWidget(&audioconfig);.
后来,我想将来自不同QWidget的特定信号连接hub到setCurrentWidget(...)QStackedWidget,以便切换页面.但是,我的编译器评论说
0Object :: connect:/Users/paperflyer/Development/App/main.cpp中没有这样的插槽QStackedWidget :: setCurrentWidget(audioconfig):41`
我有两件事没有到达:
这是整个代码:
int main(int argc, char *argv[])
{
QApplication app(argc,argv);
QStackedWidget pageStack;
CHub hub; // inherits from CWidget
CAudioConfig audioconfig; // ditto
pageStack.addWidget(&hub);
pageStack.addWidget(&audioconfig);
// connect() is a custom signal of hub
QObject::connect(&hub, SIGNAL(configure()), &pageStack, SLOT(setCurrentWidget(&audioconfig)));
pageStack.setGeometry(100,100,700,500);
pageStack.show();
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
一如既往,非常感谢你的帮助!
我已经看到并使用了这些类型转换的两种变体:
int(floatvar)
(int)floatvar
Run Code Online (Sandbox Code Playgroud)
这两者有什么区别吗?关于何时使用哪个有什么偏好?