NSString的内存管理问题

时间:2010-11-28 19:35:53

标签: ios memory-leaks nsstring

我有自定义LocationDetail对象的NSMutableArray * cityData。 cityData在viewDidLoad中创建并在dealloc中发布。 在代码的某处,基于用户操作,我填充LocationDetail并将其添加到cityData数组:

LocationDetail* d = [[LocationDetail alloc] init];
    d.city = [NSString stringWithFormat:@"%S", (char*)sqlite3_column_text16(statement, 1)];
    d.tz = [NSString stringWithFormat:@"%S", (char*)sqlite3_column_text16(statement, 3)];
    d.country = [NSString stringWithFormat:@"%S", (char*)sqlite3_column_text16(statement, 2)];
    d._id = [NSString stringWithFormat:@"%S", (char*)sqlite3_column_text16(statement, 0)];

    [cityData addObject:d];
    [d release];

当我完成视图控制器并删除它时,Leaks实用程序说我在上面的代码中有一个泄漏,在上面的所有4行中的NSCFString中都有[NSString stringWithFormat]。

我尝试删除sqlite3的内容并将调用简化为

d._id = [NSString stringWithFormat:@"%s", "a string"]

具有相同的结果。但是,如果我像这样替换NSString stringWithFormat:

d._id = @"a string";
泄漏消失了。我想知道为什么如果我使用stringWithFormat会有泄漏,但如果我使用@“something”则不会。有什么明显的我做错了吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

不会自动为您发布属性,您需要自己在

中执行此操作
- (void)dealloc

有关示例,请参阅The Objective-C Programming Language: Declared Properties


编辑:

似乎该示例已移至Advanced Memory Management Programming Guide