我应该避免创建大量变量吗?

时间:2010-06-23 10:16:16

标签: objective-c cocoa object variables

我有两种可能性:

1)将对象存储在变量中,并在我的代码中使用该变量。但是这使用内存来存储对象吗?

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
BOOL bool1 = [userDefaults boolForKey: key1];
BOOL bool2 = [userDefaults boolForKey: key2];

2)请勿将其存储在变量中,并在需要时从头开始创建。

BOOL bool1 = [[NSUserDefaults standardUserDefaults] boolForKey: key1];
BOOL bool2 = [[NSUserDefaults standardUserDefaults] boolForKey: key2];

在这种情况下会推荐什么?如果对象之间存在差异,那么我怎么知道使用哪一个?

5 个答案:

答案 0 :(得分:3)

就您在问题中所展示的特定示例而言,获得NSUserDefaults的两种方式之间没有实际差异。除非您处理大型数据对象(如UIImages),否则您应该专注于代码的清晰度和可读性。如果在测试期间发现存在内存问题,请回过头来寻找以后使用更少内存的方法。

答案 1 :(得分:1)

对于什么样的数据,您还不是很具体。但无论如何,变量指向的是消耗内存的东西,而不是变量本身。

至于你提出的其余问题,如果你发表评论来解释你的应用程序围绕这个问题,就像你的系统目前正在做什么部分一样,我将编辑它以反映这个答案。

编辑:在我更新答案之前,有人回答并接受了。请参阅接受的答案。

答案 2 :(得分:0)

如果执行的操作是一种性能很重的方法,那么每次重做时都可能会造成性能损失,只需保存信息即可。

我觉得你必须做出选择

  1. 如果分配的内存有问题,请重做。
  2. 如果内存问题不是一个重要因素,并且执行的操作不会导致性能下降,请重做它。
  3. 我相信做iPhone应用程序时,内存并不是那么超级关键(但现在可能有多任务),考虑到工作量,即尽量不重做同样的工作更为关键。但如上所述,这一切都取决于具体情况。

答案 3 :(得分:0)

你的问题的措辞暗示你可能不完全理解C指针。你不是“将一个对象存储在变量中”。第一个示例中的userDefaults变量只是一个C指针。 +standardUserDefaults方法返回指向全局用户默认对象的指针,该对象已分配给userDefaults。在第二个示例中,您检索了一个指向该对象的指针两次,每行一次。

两者之间唯一真正的区别在于,在第二个示例中,您正在执行冗余消息发送以再次检索对象引用。您的示例对性能不是很重要,但在某些情况下您可能希望缓存对象的引用,以避免发送冗余消息,例如在循环中。这一切都取决于你的程序的性能。

如果你对C指针不满意,一定要仔细阅读它们。它应该为你清理一些事情。

答案 4 :(得分:0)

在第一个示例中,您不再使用程序的内存。 NSUserDefaults对象将以任一方式存储在堆上,并且变量本身的存储将是a)寄存器或堆栈上的b)。寄存器不会占用你应用程序的任何实际内存,并且已经保留了堆栈的内存。

此外,指针占用的内存非常少 - 32位为4个字节,64位平台为8个字节。其中25万个不到1 MB。像这样的个人标量是你应该寻找节省内存的最后一个地方。