Ada*_*nes 19 arrays refactoring struct ios swift
首先,我理解值和引用类型之间的区别 - 这不是那个问题.我在Swift中重写了一些代码,并决定重构一些类.因此,我想我会看到一些类是否有意义作为结构.
内存:我有一些模型类,它们包含非常大的数组,它们的大小不断增长(最终大小未知),并且可能存在数小时.首先,是否存在关于结构的建议大小或绝对大小的指导,因为它存在于堆栈中?
重构使用:由于我正在重构现在的乱七八糟的依赖,我想知道如何改进.视图和视图控制器大多很容易,它是我的模型,它的功能,总是让我希望有更好的例子可以遵循.
WorkerManager:Singleton一次持有一个或两个Workers.一个将始终从传感器记录新数据,另一个将审查存储的数据.视图控制器从中获取Worker引用WorkerManager,并要求Worker显示数据.
Worker:队列中的所有内容,以防止内存访问问题(C数组指针随着它们的增长而不断变化).侦听:侦听Worker侦听新数据,将其发送到一个Processor对象(它创建的),清理数据并将其存储在由C语言持有的C数组中Worker.然后,如果存在有效数据,则Worker告知Analyzer(也由工作者拥有)分析数据并将其存储在其他C数组中以馈送到视图.无论是Processor和Analyzer需要国家知道在过去发生的事情和处理和分析旁边.纯原始数据存储在单独的RecordNSManaged对象中.Reviewer采用Record并使用纯原始数据重新创建所有分析的数据,以便对其进行检查.(分析数据很大,我不想将其存储到磁盘)
现在,我的第二个问题是,可以/应该Processor和Analyzer与结构取代?或者可能是协议Worker?它们不是正常意义上的"对象",只是方便的相关方法组和必要的状态.而且因为每个代码几乎是一千行,我不想把它全部放在一个类,甚至是同一个文件中.
我只是没有很好地理解如何删除我的所有状态,使用纯函数进行在数组上执行的所有复杂数学运算,以及放置它们的位置.
虽然结构本身位于堆栈上,但数组数据位于堆上,因此数组的大小可以动态增长。因此,即使您有一个包含数百万个项目的数组并将其传递到某个地方,由于写入时复制实现,在您更改新数组之前,不会复制任何项目。这在2015 年 WWDC Session 414中有详细描述。
至于第二个问题,我认为2015年WWDC Session 414再次有了答案。Apple 工程师建议对值类型进行的基本检查是:
在以下情况下使用值类型:
- 将实例数据与 == 进行比较是有意义的
- 您希望副本具有独立状态
- 数据将在跨多个线程的代码中使用
在以下情况下使用引用类型(例如使用类):
- 将实例标识与 === 进行比较是有意义的
- 您想要创建共享的可变状态
因此,根据您的描述,我认为引用类型更合适Processor并且Analyzer更好。如果您没有显式创建 new和s,则Processor和 的副本似乎不是有效的对象。您不想共享对这些对象的更改吗?AnalyzerProducerAnalyzer
| 归档时间: |
|
| 查看次数: |
1441 次 |
| 最近记录: |