Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone SQLite+;内存管理问题_Iphone_Objective C_Memory Management - Fatal编程技术网

Iphone SQLite+;内存管理问题

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) {

我有一个SQLite数据库,其中包含作为BLOB的图像数据,我正在使用下面的代码来设置对象的属性,但是我的数据出现了严重的内存问题,特别是在
数据
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创建的

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