2009-09-28 65 views
3

只是好奇,如果这是做到这一点,只是想确保它不漏水,但我会认为我只修改字符串内容。这是在循环中创建/销毁字符串的正确方法吗?

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]; 

加里

回答

7

这看上去很好泄漏明智的。如果你正在运行Xcode 3.2,你可以Build-> Build &分析器来让Clang检查这种事情。

请记住,您只需发布您分配,新增,复制或保留的内容。

考虑使用stringByAppendingPathComponent,而不是硬编码@"/"路径分隔符。 NSString有一个number of methods这样专门用于处理路径。

NSString* fullPath = [rootPath stringByAppendingPathComponent:fileName]; 
+0

嗯我尝试添加[NEWPATH stringByAppendingPathComponent:@ “/”];要测试添加“/”的结尾,但我似乎无法得到它的工作... – fuzzygoat 2009-09-28 21:22:46

+0

stringByAppendingPathComponent避免你必须知道分隔符。我已经更新了答案以反映使用情况。 – nall 2009-09-28 21:39:56

+0

谢谢,那它怎么知道要添加什么? – fuzzygoat 2009-09-28 21:44:41

1

没有什么不对的地方,但它可能是最好使用initWithFormat和释放:

NSString *newPath = [[NSString alloc] initWithFormat:@"%@/%@",rootPath,fileName]; 

// do your thing 

[newPath release]; 
+1

没有提到但很重要:这将会进入循环。 – Chuck 2009-09-28 19:56:24

+0

谢谢,来自程序编程我总是有点小心谨慎地声明变量按需(即不是在一个块的开始)我想我只需要更灵活一点,更多的开放视图关于Objective- C – fuzzygoat 2009-09-28 21:00:51

+2

事实上,在最封闭的范围内(即最接近它们使用的地方)声明变量有很好的理由。 – nall 2009-09-28 21:41:14

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); 
    } 
} 
+0

谢谢,非常感谢。 – fuzzygoat 2009-09-29 20:45:00

相关问题