我正在尝试研究不同移动平台上对象/组件之间的通信的相似性。
在Android上,有 Activity / Intent 概念传递信息,在Qt上我们有信号和插槽。
此处出现的问题:
将Activity / Intent与信号/插槽概念进行比较是否合法?与我的观点最重要的区别在于不同的粒度级别。虽然活动/意图在“整个屏幕”上运行(活动更精确,因为活动不一定代表一个单独的屏幕),信号/插槽被定义为较小的对象,例如小部件(事实上,对于每个类,源自QObject)。
考虑到平台独立性,你会说概念根本上是不同的,或者开发人员可以克服对象通信方面的技术差异和“抽象”应用程序逻辑足以最大限度地减少移植工作?怎么样?
在iOS上是否有类似的概念?(例如,目标 - 行动机制 - 或者更像是ObjectiveC提供的代理或通知)。
答案 0 :(得分:1)
我只能说说android的意图和iOS之间的区别 - 在QT中从来没有做过任何事情,但是我们走了:
意图(至少据我所知)主要用于指示改变电话状态或改变不同对象的生命周期状态。它们通常不用于更细粒度的东西,例如变更值的通知等
在iOS中,通知系统同时存在细粒度和粗粒度信息(也就是系统状态甚至模型更改) - 但它的功能完全不同。
我认为这两种机制之间没有任何直接的相似性。使用Androids Intents我可以启动新的Activites,如果我真的需要,也可以将一些值传递给另一个Activity。使用iOS通知,我可以将任何类型的值从A传递到B,但是必须实现我自己的逻辑,例如在特定的通知上启动服务。此外,iOS中的通知管理比Android Intents更明确。
答案 1 :(得分:1)
答案 2 :(得分:0)
为了比较Android上的通知与Android上的Intents,我提出了以下摘要:
共性:
的差异:
最后,我的问题归结为:因为这些概念似乎根本不同,这是设计独立于平台的Android / iOS应用程序的真正障碍吗? <登记/> 或者您是否有关于如何“抽象”这些机制并最大限度地减少移植工作的建议?(跨平台解决方案还必须有办法将这些概念转化为幕后的本机代码?)
答案 3 :(得分:0)
自从我看过Qt已经有一段时间了,但我的回忆是信号/插槽看起来非常像Objective-C(iOS)选择器(特别是对于IBAction方法)。典型用途
[button addTarget: controller action: @selector(resetState) forControlEvents: UIControlEventTouchUpInside];
VS
Qobject::connect(button, SIGNAL(clicked()), &controller, SLOT(resetState()));