我有自定义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”则不会。有什么明显的我做错了吗?
谢谢!
答案 0 :(得分:1)
不会自动为您发布属性,您需要自己在
中执行此操作- (void)dealloc
有关示例,请参阅The Objective-C Programming Language: Declared Properties。
编辑: