我有一个较大的objective-c iPhone项目,运行良好,除了在应用程序正在使用时内存使用量不断增加,并且从不减少。它不会在应用程序未被使用时增加。ARC上的Objective-c实例变量内存问题
我在Java中有一个几乎完全相同的Android应用程序,没有这个问题。经过大量的搜索和实验,我认为问题是我的所有类变量都是实例变量,即它们在.m文件中声明如下,并使用getters和setter进行访问。
@implementation SomeClass{
NSString *someVariable;
AnotherClass *anotherVariable;
}
有很多情况下两个对象将通过实例变量相互引用。我相信这是存储器问题的来源,因为我已经读过,ARC会计算剩余的剩余指针(来自另一个对象),因此绝不会从内存释放。
理想情况下,我想要一个解决方案,不需要将所有变量移动到.h文件,也不需要更改每个变量的定义,即我想要一个解决方案,我可以应用于所有变量,尽管我不不知道这是否可能。我认为我说的是实例变量是'强'的,因为它们会增加该对象的ARC引用计数,我是否可以使所有实例变量都变得“弱”,如果是这样的话,这会是一个好还是坏的想法?
仅供参考将它们移动到.h或.m无关紧要。如果你将它们移动到.h你正在公开它。 –
好吧,我希望他们是私人的,那么是否有可能让他们变得“弱”? – AndyW
相互引用的对象可能会导致问题。你有没有考虑过有父母和孩子的对象?您可以将需要的属性传递给子项,但子项只通过弱属性引用父项。 – Dominic