2010-10-20 140 views
0

我有一个包含图像数据作为BLOB的SQLite数据库,我使用下面的代码来设置对象的属性,但我得到的数据主要内存问题,特别是在和w.wineImage对象,尽管它看起来像我正确地释放一切......SQLite +内存管理问题

if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) { 

      while(sqlite3_step(selectstmt) == SQLITE_ROW) { 
       Wine *w = [[Wine alloc] init]; 

       w.wineId = sqlite3_column_int(selectstmt, 0); 
       w.wineName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)]; 

       NSData *data = [[NSData alloc] initWithBytes:sqlite3_column_blob(selectstmt, 2) length:sqlite3_column_bytes(selectstmt, 2)]; 

       if([data length] < 10){      
        UIImage *noImage = [UIImage imageNamed:@"no_image.png"];     
        w.wineImage = noImage; 
        [noImage release]; 
        [data release]; 
       } else { 
        UIImage *wineBottle = [[UIImage alloc] initWithData:data]; 
        w.wineImage = wineBottle; 
        [wineBottle release]; 
        [data release]; 
       }   

       w.price = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 3)]; 


       [wineArray addObject:w]; 
       //w=nil; 


       [w release]; 

      } 

      sqlite3_close(database); 

回答

0

你发布信息noImage但你这已经是自动释放imageNamed创建它。

我不知道这是否有助于你的问题,但你绝对不应该这样做:)