【问题标题】:How to release NSString如何释放 NSString
【发布时间】:2010-04-03 19:28:01
【问题描述】:
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。 数据库已发布,但文件名、完整路径未发布。我不知道为什么会这样。

我知道 NSArray 是自动释放的。但是documentsDirectory 是自动发布的吗? (newWordbookName 是 nsstring 类型)

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

【问题讨论】:

    标签: iphone nsstring release


    【解决方案1】:

    按照惯例,方法返回保留对象的唯一两种情况是构造函数,即 allocnew 等和对象复制方法(在其名称中包含复制) .

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

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

    【讨论】:

      【解决方案2】:

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

      NSArrayautorelease'd 的原因与所有其他对象都是autorelease'd 的原因相同:在它们返回之前为其分配值的方法称为autorelease。通常,如果方法中没有“create”或“new”一词,您可以假设方法返回 autorelease'd 对象。这是一般的 Cocoa 约定。 (虽然第 3 方代码可能很愚蠢并且做事不同,所以请注意程序员)。

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

      【讨论】:

        猜你喜欢
        • 2011-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多