只是好奇这是否是这样做的方法,只是想确保它没有泄漏,虽然我认为我只修改字符串内容。
NSMutableString *newPath = [[NSMutableString alloc] init];
for(fileName in [manager enumeratorAtPath:rootPath]){
if ([[fileName pathExtension] isEqual:@"exr"]) {
[fileArray addObject:fileName];
// THIS BIT
[newPath setString:rootPath];
[newPath appendString:@"/"];
[newPath appendString:fileName];
// HERE
attrDir = [manager attributesOfItemAtPath:newPath error:&myError];
fileSize = [attrDir objectForKey: @"NSFileSize"];
NSLog(@"File: /%@ Size: %@", fileName, fileSize);
}
}
[newPath release];
加里
答案 0 :(得分:7)
这看起来很好泄漏。如果你正在运行Xcode 3.2,你可以构建 - > Build&分析器让Clang检查这类事情。
请记住,您只需要发布您分配,新增,复制或保留的内容。
考虑使用stringByAppendingPathComponent
,而不是硬编码@"/"
路径分隔符。 NSString有一个number of methods这样的专门用于处理路径。
NSString* fullPath = [rootPath stringByAppendingPathComponent:fileName];
答案 1 :(得分:1)
它没有任何问题,尽管使用initWithFormat和release会更好:
NSString *newPath = [[NSString alloc] initWithFormat:@"%@/%@",rootPath,fileName];
// do your thing
[newPath release];
答案 2 :(得分:1)
您的代码绝对没有问题,这是正确的内存管理。
但是可以通过更少的代码和内存管理来完成:
for(fileName in [manager enumeratorAtPath:rootPath]){
if ([[fileName pathExtension] isEqualToString:@"exr"]) {
[fileArray addObject:fileName];
NSString* newPath = [rootPath stringByAppendingPathComponent:fileName];
attrDir = [manager attributesOfItemAtPath:newPath error:&myError];
fileSize = [attrDir objectForKey: @"NSFileSize"];
NSLog(@"File: /%@ Size: %@", fileName, fileSize);
}
}