iphone - NSMutableArray : Memory management while calling methods

标签 iphone objective-c ios xcode cocoa-touch

在我的 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/

相关文章:

ios - 注册 Nib 时自定义单元格( Collection View )

ios - 如何使用 xib 文件正确创建自定义单元格、注册并加载它?

iphone - 如何动态设置 UIlabel TextColor

objective-c - UIScrollView 的 subview 中的拖动事件

IOS,NSLayoutConstraint 问题

objective-c - 反转 UILabel.text 值

iphone - 避免自动释放 NSMutablearray ..... iphone 应用程序

iphone - 如何通过 iOS 上的套接字下载和发布二进制数据?

iphone - 在 iOS 7 中移动状态栏

ios - Cocoa Touch 获取用户全名