2010-02-22 84 views
0

假设您有一个可以刷新的表格视图。您是否将activityAnimator保存在内存中,或者每次单击刷新时都重新创建它?是“创建然后释放,然后重新创建然后释放”比“创建然后使用两次然后释放”更好?

我知道这可能听起来很明显,但在第一种情况下你加快你的应用程序,并在其他情况下,你有更多的自由存储空间似乎非常清楚。

但我想知道两者中的一个是否更接近“Apple标准”。

哪一个更重要? CPU使用还是内存使用?

而不要告诉我,这取决于我需要做什么。

回答

0

通过“activityAnimator”我假设你的意思UIActivityIndicatorView

如果是这样的话,你应该通过Interface Builder中添加的指标,并将其连接到您的视图控制器。这意味着如果控制器不是最顶层的,则操作系统可以释放连接的对象,如果需要的话,还可以包括指示器。这也意味着您不必在每次使用它时创建和销毁它。两全其美。

话虽如此,这感觉就像不成熟的优化。我会想象支持你的表格视图的数据源会占用更多的内存,UIActivityIndicatorView会。我建议在IB中设置UIActivityIndicatorView并使用它。

+0

我试图加我UIActivityIndi​​catorView在IB,但它只是没有让我这样做...在IB我有一个导航控制器和根视图控制器的窗口。我说我的tableView在我的RootViewController的但每次我尝试一次加我的指标上面我的tableView它取代我的tableView,我只得到了我的飞旋...... 的问题是,我希望我的微调是对我的tableView的顶部。 .. – gotye 2010-02-22 13:28:21

+0

@gotye你的表视图应该是一个UIView的兄弟,并且活动指示器也应该是同一个UIView的兄弟。因此,创建一个新的UIView,将其连接到您的控制器视图IBOutlet,然后添加一个表视图和一个活动微调器。如果这仍然无法避免,请参阅IB教程。 – freespace 2010-02-22 23:22:53

0

我不认为这存在“苹果标准”。

不过,我认为最好的方法是保持你的对象在内存中,因为它允许以提高性能的应用程序。如果应用程序需要内存,os将调用didReceiveMemoryWarning方法,此时您将不得不释放未使用的对象。

但是,如果你有很多的对象应该是从时间释放一些对象,时间是个好主意。

如果您需要了解更多信息,你可以看到Memory Management Programming Guide for Cocoa

0

创建一个方法,该方法将创建并返回activityAnimator。它应该检查它是否为零,以及它是否创建它。如果不是只返回现有的。然后你可以坚持它,只释放该视图控制器的dealloc或didRecieveMemoryWarning。然后,当你需要使用它而不是引用类的引用时调用你的方法来确保引用被引用。这样你就可以获得最佳性能,但不会遇到内存问题。

+0

视图控制器实际上是我的导航控制器的根视图控制器...当我推新视图时,我的根视图控制器的dealloc方法会被调用吗? – gotye 2010-02-22 13:30:23

+0

我不认为会。但是,因为它会一直释放它(如果你允许的话),当它用完内存时,我会停止担心它。就像@freespace所说的那样。 UIActivityIndi​​catorView的内存占用很可能只是你的tableView的数据源的一小部分,我不会太担心它。选择这里建议的任何一种方法。它会正常工作。 – jamone 2010-02-22 13:50:04

+0

好吧,我想我明白了!干杯 – gotye 2010-02-23 11:05:06