图数据源中的内存泄漏

时间:2012-06-13 10:09:42

标签: iphone ios memory sqlite memory-leaks

我最近使用sqlite3数据库继承了一个大型项目,目前我正在分散大量的内存泄漏。在无法解决问题之后,一些泄漏让我感到困惑和士气低落。方法中的这个循环泄漏了大量的字节,但看起来如此简单,我根本就不知道如何更改它以防止泄漏。

...
    while ((ret=sqlite3_step(selStmt))==SQLITE_ROW) 
    { 

        GraphData *item = [GraphData alloc];

        item.key = sqlite3_column_int(selStmt, 0);
        item.value = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selStmt,1)];

        [newData addObject:item]; 

        [item release], item = nil;

    }
...

    @interface GraphData : NSObject{

    NSInteger key;
    NSString *value;
}

@property (nonatomic, readwrite) NSInteger key;
@property (nonatomic, retain) NSString *value;

-(id)initWithPrimaryKey:(NSInteger) xid;
-(id)initWithName:(NSString *)n key:(NSInteger)i;

@end



    #import "GraphData.h"

@implementation GraphData

@synthesize  key,value;

-(id)initWithPrimaryKey:(NSInteger) xid{

    self.key = xid;
    self.value = @"";

    return self;

}
-(id)initWithName:(NSString *)n key:(NSInteger)i{

    self.key = 0;
    self.value = n;

    return self;

}

@end

此数据源类中的几乎所有泄漏都来自此循环。

我希望这是一件微不足道的事情,而我的经验却被忽视了。

感谢您抽出宝贵时间来查看我的问题。

1 个答案:

答案 0 :(得分:0)

GraphData类中没有dealloc。

- (void)dealloc {
    [value release];
    [super dealloc];
}

(我假设您没有使用ARC,因为您的第一个代码段中有release。我真的建议转换为ARC - 这种泄漏消失了。)