Arp*_*ekh 0 iphone xcode cocoa-touch objective-c ios
在我的iOS应用程序中,我使用的是名为imageMArray的NSMutableArray.我已设置其getter和setter属性并实例化它.
在viewDidLoad中:
imageMArray=[[NSMutableArray alloc] initWithArray:CategoryImages];
imageMArray=[self shuffleOnlyArray:imageMArray];
Run Code Online (Sandbox Code Playgroud)
在ShuffleOnlyArray方法中:
NSMutableArray *destArray1 = [[NSMutableArray alloc] initWithCapacity: [sourceArray count]] ;
return destArray1;
Run Code Online (Sandbox Code Playgroud)
在shuffle方法:
imageMArray=[[self shuffleOnlyArray:imageMArray] retain];
Run Code Online (Sandbox Code Playgroud)
Shuffle方法中似乎存在内存泄漏.
我应该释放imageMArray还是将其设置为nil?如果它应该被释放,它应该被自动释放吗?
imageMArray=[[NSMutableArray alloc] initWithArray:CategoryImages];
Run Code Online (Sandbox Code Playgroud)
在上面的陈述中,你有一个记忆漏洞.相反,你可以像下面这样.
imageMArray = [NSMutableArray arrayWithArray:CategoryImages];
Run Code Online (Sandbox Code Playgroud)
在ShuffleOnlyArray方法中,返回自动释放的对象.
NSMutableArray *destArray1 = [[NSMutableArray alloc] initWithCapacity: [sourceArray count]] ;
return [destArray1 autorelease];
Run Code Online (Sandbox Code Playgroud)
但是在得到它之后,保留(获取所有权)数组对象.
imageMArray=[[self shuffleOnlyArray:imageMArray] retain];
Run Code Online (Sandbox Code Playgroud)
编辑
在shuffle
方法中,执行以下操作:
NSMutableArray *imageMArray1 = [imageMArray mutableCopy];
if( imageMArray )
{
[imageMArray release];
}
imageMArray=[[self shuffleOnlyArray:imageMArray1] retain];
[imageMArray1 release];
Run Code Online (Sandbox Code Playgroud)
编辑2: 另一个解决方案:
使用SO链接中提到的类别进行随机播放
无需创建新的并释放阵列.