关于分析Cocoa程序的程序布局和存储的建议

时间:2011-01-25 18:15:43

标签: iphone objective-c cocoa macos bluetooth

简短的背景:我目前正在为Xcode编写Mac程序,我计划将部分(概念上,如果不是整个代码块)部分转移到iPhone上。它涉及通过蓝牙从外部传感器不断接收数据(无论用户交互如何,都必须接收数据)。我在Mac上使用IOBluetooth构建了一个简单的程序,它可以很好地配对并开始接收数据,我打算使用BTstack和越狱的iPhone来访问iPhone上的蓝牙芯片。

在我走得太远之前,我想在概念上正确地放置这个程序,因为我习惯于程序编程,而Obj-C对我来说是一个新的野兽。正如我所说,我希望能够在移动到iPhone时尽可能多地保存这些代码(我知道有不同类别的视图等,但我看到了很多相似之处)。

1)通过我的程序,我将不断在后台接收数据(无论用户操作如何 - 即,一旦用户启动程序并选择BT设备,数据将会流动)我需要存储和分析数据可以呈现给用户之前。那么(问题),怎么会这样呢?我想把我所有的BT代码放在appdelegate中,然后有一个视图控制器(在mac上只是一个处理窗口,但在iPhone上将是一个带有多个子视图控制器的标签控制器),以及分析和存储由“控制器”访问的数据(也作为日志文件,供将来参考)的模型,在本例中为appdelegate。这种布局有意义吗?它是Kosher MVC / Cocoa将所有BT代码和分析放在appdelegate中,还是它(它们)应该在它自己的类中(知道mac和iPhone上的BT代码必须经常接收突发的数据) ?怎么可以改进?

2)分析方面的相关问题。我没有在网上找到一个有分析的Cocoa示例(我找到了程序,但没有解释他们使用的模型)。保存的基本数据非常小,每小时约50kB。但是,结果(包括频谱和瀑布图)可能> 2MB /小时(这是一个可能每天运行数小时的程序)。要分析“在旅途中”并将结果放在滚动缓冲区中,我知道会非常快,但我希望我的程序允许用户回顾过去的特定时间段。我的问题是模型对象应该分析数据并将结果与​​基本数据一起存储,还是模型只存储基本数据,然后将数据返回给控制器,控制器然后分析它以将其呈现给视图(如果重新计算数据,甚至数小时,这将是非常重的CPU?

任何想法或建议都会非常感激,因为我觉得奠定适当的基础可以节省我数小时的编码(和修复/调试)。

2 个答案:

答案 0 :(得分:1)

关于你的问题1:

我建议您编写一个管理蓝牙数据的类/对象,与应用代理分开。应用程序委托是视图对象与控制器相遇的地方,因此会有很多对AppKit(在OS X上)和UIKit(在iOS上)的调用。更改将是如此之大,以致同一文件中的操作系统之间的#ifdef对应用程序委托没有多大意义。

相反,制作一个将蓝牙控制器放在应用代表中的ivar。这样,您的代码将更好地构建,并且更容易重用。

关于你的问题2:

在OS X机器上,这些天通常带有足够的RAM,如果每小时2MB,那么在RAM上保存和缓存所有结果数据就没问题了。

在iOS机器上,RAM是一种严重危害的资源。如果您的程序将计算出的数据缓存在内存中并消耗大量RAM并且用户将其发送到后台,那么操作系统可能会直接杀死您的程序而不是暂停它,例如。然后,您还需要重新计算数据,因为您的应用程序已重新启动。

即使在iOS计算机上,文件系统容量也非常大。因此,一种方法是将计算出的数据写出到磁盘上,然后让视图控制器从那里重新加载先前计算的数据。这样,您的程序即使在重新启动后也可以访问预先计算的数据。

如果您不将缓存目录硬编码到程序中,那么缓存代码甚至可以在OS X和iOS之间共享。

答案 1 :(得分:0)

如果iPhone上的软件应该在BTstack的后台处理数据中连续运行,我建议为数据处理创建一个LaunchDaemon,并为配置提供常规应用程序。 (虽然BTstack鼠标/键盘/ GPS不遵循这个建议,但是当我到处更新它们时,Celeste会使用守护进程进行实际的文件传输,例如。)