频繁分配/释放对象 - 目标-C

时间:2013-09-02 02:57:32

标签: objective-c object memory-management allocation lazy-initialization

我正在使用“Requests Buffer”类作为我的主要Model类的@property。缓冲区有一个惰性实例化,当缓冲区模型中没有要处理的项目时,将其设置为nil。我想知道复杂缓冲区对象的分配和释放是否有合理的频率?在模型的所有生命周期中,只有将它分配到实例变量中才有意义?可能有人可以解释分配后的机制,它是以CPU为代价完成的吗?请指教。 每秒大约有5-10个分配/解除分配。

2 个答案:

答案 0 :(得分:2)

你测量过了吗?在您支持的功能最差的硬件上是否存在用户明显的性能问题?您是否在低带宽/高延迟与高带宽/低延迟情况下进行测试?

如果在具有最低功率和最高功率配置的带宽配置中用户没有明显的问题,那么进一步的追求只不过是[非常有价值的]教育活动。

如果出现问题,在衡量之前,无法知道性能瓶颈在哪里。无法优化你不知道的慢速!

Allocations Instrument和CPU Profiler Instrument都是量化性能的绝佳工具。


合理大小的分配相对便宜,但它们确实需要跨线程进行同步操作(或少数)。消耗 new 内存是昂贵的,但在具有大量allocs / deallocs的工作集上飘动通常非常快。在任何具有大量alloc / dealloc流量的系统中,都会出现碎片,并且随着时间的推移会很昂贵。

答案 1 :(得分:1)

请遵循以下规则:

  • 编写干净且结构良好的代码
  • 让它工作
  • 如果效果不佳,请对其进行分析并确定瓶颈

只有看看优化。

在正常情况下,每秒5-10次分配/解除分配是不明显的,除非涉及复杂且缓慢的初始化或同步代码..