Iphone SQLite+;内存管理问题
我有一个SQLite数据库,其中包含作为BLOB的图像数据,我正在使用下面的代码来设置对象的属性,但是我的数据出现了严重的内存问题,特别是在Iphone SQLite+;内存管理问题,iphone,objective-c,memory-management,Iphone,Objective C,Memory Management,我有一个SQLite数据库,其中包含作为BLOB的图像数据,我正在使用下面的代码来设置对象的属性,但是我的数据出现了严重的内存问题,特别是在数据和w.wineImage对象上,尽管看起来我正确地释放了所有内容 if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) { while(sqlite3_step(selectstmt) == SQLITE_ROW) {
数据和w.wineImage
对象上,尽管看起来我正确地释放了所有内容
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);
if(sqlite3\u prepare\u v2(数据库,sql,-1,&selectstmt,NULL)=SQLITE\u OK){
while(sqlite3\u步骤(selectstmt)=SQLITE\u行){
葡萄酒*w=[[Wine alloc]init];
w、 wineId=sqlite3\u column\u int(selectstmt,0);
w、 wineName=[NSString stringWithUTF8String:(char*)sqlite3\u column\u text(selectstmt,1)];
NSData*data=[[NSData alloc]initWithBytes:sqlite3_column_blob(selectstmt,2)长度:sqlite3_column_bytes(selectstmt,2)];
如果([数据长度]<10){
UIImage*noImage=[UIImage ImageName:@“no_image.png”];
w、 wineImage=noImage;
[无图像释放];
[数据发布];
}否则{
UIImage*wineball=[[UIImage alloc]initWithData:data];
w、 wineImage=酒瓶;
[酒瓶释放];
[数据发布];
}
w、 price=[nsstringwithutf8string:(char*)sqlite3\u column\u text(selectstmt,3)];
[wineArray addObject:w];
//w=零;
[w释放];
}
sqlite3_关闭(数据库);
您正在释放noImage,但您是从已自动释放的ImageName创建的
我不知道这是否有助于解决你的问题,但你绝对不应该这么做:)