我有一個較大的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