Objective-C错误异常dropbox
我有个问题。以下代码中EXC_BAD_访问的原因在哪里Objective-C错误异常dropbox,objective-c,arrays,exc-bad-access,Objective C,Arrays,Exc Bad Access,我有个问题。以下代码中EXC_BAD_访问的原因在哪里 -(void)restClient:(DBRestClient *)client loadedMetadata:(DBMetadata *)metadata { if(metadata.isDirectory) { db_Path = metadata.path; int i = 0; NSString *fileName = [[NSString alloc] init];
-(void)restClient:(DBRestClient *)client loadedMetadata:(DBMetadata *)metadata {
if(metadata.isDirectory) {
db_Path = metadata.path;
int i = 0;
NSString *fileName = [[NSString alloc] init];
for(DBMetadata *file in metadata.contents) {
fileName = [NSString stringWithFormat:@"%@", file.filename];
[db_MetaFileNames addObject:file.filename];
i++;
}
[self createMetaListArray];
[fileName release];
}
}
-(void)createMetaListArray {
fileNamesAtDirectory = db_MetaFileNames;
for (int i=0; i < [fileNamesAtDirectory count]; i++) {
NSString *filePathWithName = db_directory;
[filePathWithName stringByAppendingFormat:
[fileNamesAtDirectory objectAtIndex:i]];
[filePathsAtDirectory addObject:filePathWithName];
[filePathWithName release];
}
}
-(void)restClient:(DBRestClient*)客户端加载的元数据:(DBMetadata*)元数据{
if(metadata.isDirectory){
db_Path=metadata.Path;
int i=0;
NSString*fileName=[[NSString alloc]init];
for(metadata.contents中的DBMetadata*文件){
fileName=[NSString stringWithFormat:@“%@”,file.fileName];
[db_MetaFileNames addObject:file.filename];
i++;
}
[自行创建metalistarray];
[文件名发布];
}
}
-(无效)createMetaListArray{
fileNamesAtDirectory=db_元文件名;
对于(int i=0;i<[fileNamesAtDirectory count];i++){
NSString*filePathWithName=db\u目录;
[filePathWithName stringByAppendingFormat:
[fileNamesAtDirectory objectAtIndex:i]];
[filePathsAtDirectory添加对象:filePathWithName];
[filePathWithName发布];
}
}
这里有人能帮我吗?这里:
NSString *fileName = [[NSString alloc] init];
for(DBMetadata *file in metadata.contents) {
fileName = [NSString stringWithFormat:@"%@", file.filename];
第一行的NSString
会被第三行的新值覆盖。原始值泄漏
这意味着:
}
[self createMetaListArray];
[fileName release];
最后一行中的版本释放的不是上面alloc/init的文件名
,而是循环中的赋值。你不允许/复制/保留它,所以你不“负责”发布它
在第二个函数中,您也有类似的误解
[filePathWithName stringByAppendingFormat:[fileNamesAtDirectory objectAtIndex:i]];
这不会修改filePathWithName
。它返回一个新字符串
我建议你仔细阅读一下Cocoa的内存管理规则——你缺少一些基础知识。了解这些会让你的生活更轻松。删除了我的答案。我不知道db_目录从哪里来。那么,对于echo Mark,它在哪里失败呢?EXC_BAD_访问来自main.m;)