【问题标题】:Allocating vs. reusing in Objective C [closed]在Objective C中分配与重用[关闭]
【发布时间】:2016-05-04 14:36:09
【问题描述】:

作为一个经验法则,什么更好?

  1. 在我需要时分配一个新实例(在我的 UIViewController 的情况下)并在我完成时解除分配(“释放”我对它们的保留,因此允许它们被 ARC 解除分配),或者;
  2. 维护可重用实例的动态池,因此即使在不使用时也将它们保存在内存中。

在我看来,分配新实例可能是一项艰巨的工作,但可以避免由于重用实例的意外状态以及特定时间比实​​际需要的更多实例的内存负担而导致的错误。

很想听听您对此的看法...

【问题讨论】:

  • 您不需要释放实例,ARC 会为您完成。您希望您的项目基于 ARC 还是非 ARC?
  • 我想我并不清楚 - 当我说“解除分配”时,我的意思是“释放”(同样,不是字面意思)我保留的实例(并因此允许它被解除分配)

标签: objective-c memory pool


【解决方案1】:

过早的优化是浪费时间。在量化性能问题之前,除了保持代码的合理性和使用合理的算法之外,没有任何优化可做。

在这种情况下,每次重新分配很可能不会成为性能瓶颈的可操作来源。但是,分配期间执行的任务可能是。例如,创建图像或加载资源,而不是使用某种缓存。

但是通过缓存所述资源而不是作为视图控制器的相对宏观对象可以更好地解决这样的瓶颈。

【讨论】:

  • 有道理。如果我们谈论许多实例,您的答案是什么?您更关心分配(宏)对象还是在内存中“拖动”它?
  • 理想情况下,“宏”对象的分配——一个与后端和前端的许多不同部分挂钩的控制层对象——应该相对便宜。它不应该维护或计算一堆状态,而是更多地从模型层反映状态以供视图层使用,并提供将用户交互反映到模型状态更改的管道。为此,我通常会忽略这个问题,除非控制器证明重新分配成本很高。大多数情况下,重构控制器可以提供更通用的性能提升...
猜你喜欢
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
  • 2016-06-25
  • 2013-12-24
  • 2016-04-07
  • 2011-12-04
  • 2012-03-03
相关资源
最近更新 更多