我知道那种菜鸟问题,但它现在已经让我感到伤心了2天 我有以下代码
albumsVC.discList = [[NSMutableArray alloc]init];
for(id song in songs){
if([self checkIfAllFilesExist:[song objectForKey:@"fileName"]]){
[albumsVC.discList addObject:song];
}
}
和
-(BOOL)checkIfAllFilesExist: (NSString *) theFilename {
BOOL exist;
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDir = [documentPaths objectAtIndex:0];
docPath = [ documentDir stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.mp3",theFilename]];
NSFileManager *fileManager = [NSFileManager defaultManager];
exist = [fileManager fileExistsAtPath:docPath];
docPath = nil;
docPath = [[NSString alloc] init];
if(!exist){
return NO;
}
return YES;
}
但它在五个循环后崩溃(我不知道为什么五个?)它告诉我发送到解除分配的实例0x87cdc10的消息 在
行docPath = [ documentDir stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.mp3",theFilename]];
其中docPath是创建为非原子的头文件中的NSString并保留..
我无法解决问题你能帮助我吗?
答案 0 :(得分:0)
-(BOOL)checkIfAllFilesExist: (NSString *) theFilename
会造成内存泄漏。
将其替换为以下代码:
-(BOOL)checkIfAllFilesExist: (NSString *) theFilename {
BOOL exist;
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDir = [documentPaths objectAtIndex:0];
self.docPath = [ documentDir stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.mp3",theFilename]];
NSFileManager *fileManager = [NSFileManager defaultManager];
exist = [fileManager fileExistsAtPath:docPath];
if(!exist){
return NO;
}
return YES;
}
假设您的.h文件中包含非原子的docPath属性,请保留。
答案 1 :(得分:0)
因为你说它总是在循环的第五次迭代中崩溃,所以检查循环所带来的对象。
我的意思是说,检查theFilename
。尝试打印'song'
字典以确保您在fileName
密钥中有内容。
也使用Apurv代码。