我有两种可能性:
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];
在这种情况下会推荐什么?如果对象之间存在差异,那么我怎么知道使用哪一个?
答案 0 :(得分:3)
就您在问题中所展示的特定示例而言,获得NSUserDefaults
的两种方式之间没有实际差异。除非您处理大型数据对象(如UIImages
),否则您应该专注于代码的清晰度和可读性。如果在测试期间发现存在内存问题,请回过头来寻找以后使用更少内存的方法。
答案 1 :(得分:1)
对于什么样的数据,您还不是很具体。但无论如何,变量指向的是消耗内存的东西,而不是变量本身。
至于你提出的其余问题,如果你发表评论来解释你的应用程序围绕这个问题,就像你的系统目前正在做什么部分一样,我将编辑它以反映这个答案。
编辑:在我更新答案之前,有人回答并接受了。请参阅接受的答案。答案 2 :(得分:0)
如果执行的操作是一种性能很重的方法,那么每次重做时都可能会造成性能损失,只需保存信息即可。
我觉得你必须做出选择
我相信做iPhone应用程序时,内存并不是那么超级关键(但现在可能有多任务),考虑到工作量,即尽量不重做同样的工作更为关键。但如上所述,这一切都取决于具体情况。
答案 3 :(得分:0)
你的问题的措辞暗示你可能不完全理解C指针。你不是“将一个对象存储在变量中”。第一个示例中的userDefaults
变量只是一个C指针。 +standardUserDefaults
方法返回指向全局用户默认对象的指针,该对象已分配给userDefaults
。在第二个示例中,您检索了一个指向该对象的指针两次,每行一次。
两者之间唯一真正的区别在于,在第二个示例中,您正在执行冗余消息发送以再次检索对象引用。您的示例对性能不是很重要,但在某些情况下您可能希望缓存对象的引用,以避免发送冗余消息,例如在循环中。这一切都取决于你的程序的性能。
如果你对C指针不满意,一定要仔细阅读它们。它应该为你清理一些事情。
答案 4 :(得分:0)
在第一个示例中,您不再使用程序的内存。 NSUserDefaults对象将以任一方式存储在堆上,并且变量本身的存储将是a)寄存器或堆栈上的b)。寄存器不会占用你应用程序的任何实际内存,并且已经保留了堆栈的内存。
此外,指针占用的内存非常少 - 32位为4个字节,64位平台为8个字节。其中25万个不到1 MB。像这样的个人标量是你应该寻找节省内存的最后一个地方。