2014-02-16 49 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,有没有泄漏