2014-02-16 48 views
-1

我有一個循環,我想在每次迭代中重新定義數組的內容。我擔心泄漏。這段代碼有什麼問題嗎?iOS循環和泄漏

for (int i=0;i<numberOfReps;i++){ 
    NSArray *shuffledArray=[self shuffleArray:originalArray]; 
    // use shuffled array 
} 

感謝您的閱讀!

編輯:

這裏是shuffleArray(從What's the Best Way to Shuffle an NSMutableArray?信貸Kristopher約翰遜):

-(NSArray*)shuffleArray:(NSArray*)array{ 
    NSMutableArray *newArray=[NSMutableArray arrayWithArray:array]; 
    NSUInteger count = [newArray count]; 
    for (NSUInteger i = 0; i < count; ++i) { 
     // Select a random element between i and end of array to swap with. 
     int nElements = count - i; 
     int n = (arc4random() % nElements) + i; 
     [newArray exchangeObjectAtIndex:i withObjectAtIndex:n]; 
    } 
    return [NSArray arrayWithArray:newArray]; 
} 

(和我使用ARC)

+0

您需要發佈-shuffleArray方法的內容。迄今爲止您發佈的代碼中沒有任何泄漏。 –

+0

你可以通過創建你自己的類並在init'和'dealloc'方法中放入一條NSLog語句來輕鬆地進行測試。 – nhgrif

回答

1

假設我們使用ARC和shuffleArray方法很好,這個代碼也可以。你發佈的代碼沒有泄漏。

每個shuffledArray在循環的每次迭代結束時都會被釋放(除非將其保存在其他地方)。並且只有一個originalArray


編輯:編輯後,再次,假設我們使用ARC,沒有代碼泄漏。 newArray只要shuffleArray返回。在循環迭代結束時釋放shuffledArrayoriginalArrayfor循環之外有引用,並保留在內存中,直到它沒有更多引用。

這裏唯一可能的泄漏是你在循環的//use shuffled array部分用shuffledArray做的任何事情。

+0

感謝您的回覆,請參閱我上面的更新。 – Rogare

+0

好,很好。感謝您的解釋,非常感謝。 – Rogare

1

這取決於。

只有當你確定shuffleArray返回自動釋放對象的方法,那麼就用你的代碼沒有壞處,(這假設你沒有使用ARC)。

編輯: 看到你的代碼更新後,如果不管你使用ARC,有沒有泄漏