2014-01-09 60 views
1

我創建的應用程序僅支持ARC和iOS 7。我的所有屬性都被正確標記爲弱,並且所有強變量在我需要的地方標記爲零。即使使用ARC,內存也不斷增加儀器使用

當我用儀器運行我的應用程序時,我發現內存分配不斷增加。當我去任何屏幕的內存增加(大約2 MB)。當我彈出這個視圖時,內存只下降到幾KB。我不知道發生了什麼。

而坡平我使用以下的圖:

UPDATE:

[UIView animateWithDuration:0.5 animations:^{ 
     CGRect newFrame = aSideMenu.view.frame; 
     newFrame.origin = SIDE_MENU_VIEW_ORIGIN_FINAL; 
     [aSideMenu.view setFrame:newFrame]; 
    } completion:^(BOOL finished) { 
     [sender setUserInteractionEnabled:YES]; 
}]; 

在這裏,我使用aSideMenu在框。 aSideMenu是強變量。你認爲我需要創建它的弱引用和使用嗎?

__weak id aWeak = aSideMenu; 

並使用這個aWeak而不是aSideMenu?

而且在幾個塊,我使用:

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:....nil]; 

我應該通過'快譯通」太多的弱引用?

我不確定這是否是原因。請幫我跟蹤這個問題。此外,讓我知道是否有其他需要添加在這個問題更好的解決方案。

謝謝

+0

你可以顯示哪個在這個塊內?你有可能引用哪一個不應該,並且它保留了一些對象......如果你正在訪問自己,那麼在進入塊之前,讓自己創建指向自己的弱指針。 –

+0

是的,你應該對side block中的強指針做弱引用。但是,如果對象被釋放,弱指針可能爲零,因此在使用它之前,請強烈引用塊內的弱指針並檢查零。對於字典,如果它的實例變量或屬性是yes,如果它的方法是局部的,則使用塊運算符,如果它在方塊中則按照原樣使用它。 –

回答

1

如果你粘貼你的代碼也會很好。沒有代碼,我可以給你一些提示。 就像從未嘗試訪問塊中自我的強指針。在進入一個塊之前,創建自我的弱指針。

__weak id weakSelf = self; 

然後在塊內使用weakSelf

更好地測試您的應用程序的無限內存增長,其中分配的內存永遠不會得到處理的機會,您可以使用分配工具佔用足跡。

更新:

  1. 是因爲你正在呼籲強烈的指針setter方法,它將保留它。如果他們共享,你必須讓他們__weak或__block。 https://developer.apple.com/library/ios/documentation/cocoa/conceptual/Blocks/Articles/bxVariables.html#//apple_ref/doc/uid/TP40007502-CH6-SW1

  2. 再多一些代碼後,我想對塊中的引用做一些更清楚的事情。 當你在塊內引用一些強指針時,內存問題可能會出現,因爲塊不會讓它們釋放,因爲它們有有效的引用,這是內存問題的主要原因。爲此,我們使用__weak id創建了一個弱指針,所以我不會創建一個retian循環。 但是,如果對象沒有其他的vaild引用,還有另一個問題,它將被釋放,並且引用將爲零,並且可能導致崩潰。

所以,最好的做法是創建一個強大的參考,以弱的方塊和檢查爲零。

+0

可能要添加到您的答案。更具體地說明在使用塊時如何避免強參考週期。儘管你的回答很好。 https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html – Freddy

+0

好的補充... –

+0

@C_X感謝您的回覆,請檢查我更新的問題.. –

相關問題