2013-01-31 107 views
0

我已經使用Allocations描述了我的一個應用程序,並發現無論何時我調用特定方法,我的「實時字節數」增加了300 KB。我不知道可能是什麼原因造成的。iOS - 什麼是分配泄漏?

下面的代碼行是罪魁禍首:

CNTile *newTile = [self getTileAtPosition:3]; 

相關的方法,內容是這樣的:

- (CNTile *)getTileAtPosition:(int)pos 
{ 
    CNTile *tileToReturn; 

    for (int x = 0; x < [row count]; x++) 
    { 
     for (int y = 0; y < [col count]; y++) 
     { 
      The code here generates four CGPoints and a CGMutablePathRef, 
      then uses CGPathContainsPoint to determine which CNTile to return. 
     } 
    } 

    return tileToReturn; 
} 

我要指出,我CNTile類僅包含UIViewUIImageView,以及作爲一些簡單的變量(如int s和BOOL s)。

任何幫助將不勝感激!

+0

我認爲這不是一個問題,有您的Live字節增大(當然,合理的措施),只要他們正確釋放之後。例如,如果在加載ViewController時實時字節數增加,如果您離開此ViewController並返回它,您應該看到相同數量的活動字節(例如,之前爲50KB,加載時爲300KB,當您當你回來時離開,回到300KB)。 **不是100%肯定這一點,但這就是我記得我的分析經驗。** – rdurand

+0

請發佈內部「for」循環的代碼 - 這是關鍵區域。此外,活動字節的數量在一段時間後保持不變,還是會回落? – Stavash

回答

1

你如何創建CGMutablePathRef?用CGPathCreateMutable?如果是,請確保您使用CGPathRelease釋放它:

CGMutablePathRef thePath = CGPathCreateMutable(); 
... 
CGPathRelease(thePath); 
+0

非常感謝你!我並不認爲'CGPoints'或'CGMutablePathRef'會成爲問題,因爲我認爲它們會涉及如此少量的字節,但這似乎解決了問題!我只關閉了路徑,沒有發佈它。 – achiral

+0

那麼,兩個循環可能會大大增加內存消耗:) – kovpas

+0

好點!這個內部循環會被調用256次... – achiral