在我的 iOS 应用程序中,我使用了一个名为 imageMArray 的 NSMutableArray。我已经设置了它的 getter 和 setter 属性并实例化了它。
在viewDidLoad中:
imageMArray=[[NSMutableArray alloc] initWithArray:CategoryImages];
imageMArray=[self shuffleOnlyArray:imageMArray];
在 ShuffleOnlyArray 方法中:
NSMutableArray *destArray1 = [[NSMutableArray alloc] initWithCapacity: [sourceArray count]] ;
return destArray1;
随机播放方法:
imageMArray=[[self shuffleOnlyArray:imageMArray] retain];
Shuffle 方法中似乎存在内存泄漏。
我应该释放 imageMArray 还是将其设置为 nil?如果应该发布,是否应该自动发布?
最佳答案
imageMArray=[[NSMutableArray alloc] initWithArray:CategoryImages];
在上面的语句中,你有一个内存泄漏。 相反,您可以像下面这样。
imageMArray = [NSMutableArray arrayWithArray:CategoryImages];
在 ShuffleOnlyArray 方法中,返回自动释放的对象。
NSMutableArray *destArray1 = [[NSMutableArray alloc] initWithCapacity: [sourceArray count]] ;
return [destArray1 autorelease];
但是在你得到它之后,保留(取得所有权)数组对象。
imageMArray=[[self shuffleOnlyArray:imageMArray] retain];
编辑
在shuffle
方法中,进行如下操作:
NSMutableArray *imageMArray1 = [imageMArray mutableCopy];
if( imageMArray )
{
[imageMArray release];
}
imageMArray=[[self shuffleOnlyArray:imageMArray1] retain];
[imageMArray1 release];
编辑 2: 另一种解决方案:
使用 SO link 中提到的类别进行随机播放
无需创建新数组和释放数组。
关于iphone - NSMutableArray : Memory management while calling methods,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9733394/