如何发布NSString

时间:2010-04-03 19:28:02

标签: iphone nsstring release

NSArray     *path                   = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString    *documentsDirectory     = [path objectAtIndex:0];

NSString    *databasePath           = [documentsDirectory stringByAppendingPathComponent:@"DB"];
NSString    *fileName               = [newWordbookName stringByAppendingString:@".csv"];
NSString    *fullPath               = [databasePath stringByAppendingPathComponent:fileName];

[[NSFileManager defaultManager] createFileAtPath:fullPath contents:nil attributes:nil]; 

[databasePath release];
//[fileName release]; Error!
//[fullPath release]; Error!

//NSLog(@"#1 :databasePath: %d",[databasePath retainCount]);
//NSLog(@"#1 :fileName: %d",[fileName retainCount]);
//NSLog(@"#1 :fullPath: %d",[fullPath retainCount]);

我正在使用此代码并想要发布NSString * .. 所以,我声明了NSString的fileName,fullPath和databasePath。 数据库已发布但fileName,fullpath不会释放。我不知道为什么会这样。

我知道NSArray是自动释放的。但是文件目录是自动释放的吗? (newWordbookName是nsstring类型)

我希望我查看有关iPhone内存管理的文档。

2 个答案:

答案 0 :(得分:2)

按照惯例,方法返回保留对象时只有两种情况是构造函数,即 alloc new 等,以及对象复制方法(在其名称中包含副本) 。

在所有其他情况下,除非在文档中另有明确说明,否则该对象应该是自动释放的。

这是完整的内存管理文档: Cocoa Memory Management

答案 1 :(得分:2)

您不应该在上述代码中的任何对象上调用release

NSArrayautorelease'd的原因与所有其他对象autorelease'的原因相同:为其分配名为autorelease的值的方法他们回来之前。通常,如果对象中没有单词“create”或“new”,则可以假设方法返回autorelease d个对象。这是一般的Cocoa惯例。 (虽然第三方代码可能很傻,而且做事情也不同,所以需要警告程序员。)

您只需要自己担心alloccopy对象;换句话说,将每个alloccopyreleaseautorelease配对。