采取以下方法(用 Ruby 编写,但这个问题可以应用于大多数 OO 语言)
# Getter method which returns an alert
def alertView
_alertView = AlertView.new
_alertView.title = "This is the title"
_alertView.body = "This is the body of my alert"
_alertView
end
假设在应用程序的整个生命周期中定期调用此方法。标题和正文属性字符串每次都会被实例化为新对象。
为了优化这一点,我们可以执行以下操作:
ALERT_TITLE = "This is the title"
ALERT_BODY = "This is the body of my alert"
# Getter method which returns an alert
def alertView
_alertView = AlertView.new
_alertView.title = ALERT_TITLE
_alertView.body = ALERT_BODY
_alertView
end
这样,ALERT_TITLE
andALERT_BODY
字符串只在定义类时实例化一次,然后在整个应用程序的生命周期中重用。
我的问题是:第二种方法是最优的吗?虽然这意味着垃圾收集器的工作量更少并且内存使用可能更稳定,但这也意味着应用程序一直在占用更多内存,而不是释放当前不需要的对象。我在将它应用到我的应用程序中的所有常量字符串或根本不应用这种方法以及在需要时定义每个字符串之间左右为难。
第三种方法是使用类变量,但与第二种方法相比,它提供的唯一优势是变量是延迟加载的。
# Getter method which returns an alert
def alertView
_alertView = AlertView.new
_alertView.title = @@alert_title ||= "This is the title"
_alertView.body = @@alert_body ||= "This is the body of my alert"
_alertView
end