IOS FMDB内存泄漏(ios fmdb memory leaks)

2019-11-02 11:08发布

喜林询问我的朋友,谁是这个FMDB内存问题挣扎了这个问题。 他的项目从数据库读取列表,并且他打开数据库,并读取针对每个小区的数据(这不是一个好主意,但他做到了),在初始化,初始化数据库队列,

 databaseQueue = [[FMDatabaseQueue alloc] initWithPath:_dbPath];

在的cellForRowAtIndexPath,使用configCell做事

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString * addressBookTableViewCellIdentifier = @"AddressBookTableViewCell";
AddressBookTableViewCell * cell = (AddressBookTableViewCell*)[tableView dequeueReusableCellWithIdentifier:addressBookTableViewCellIdentifier];
if (cell == nil)
{
    // Create a cell to display an ingredient.
    cell = [[[AddressBookTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
                                            reuseIdentifier:addressBookTableViewCellIdentifier]
            autorelease];
    cell.selectionStyle = UITableViewCellSelectionStyleBlue;
}
[self configCell:cell atIndexPath:indexPath];
return cell;

}

-(void)configCell:(AddressBookTableViewCell *)aCell atIndexPath:(NSIndexPath *)indexPath{

__block  NSDictionary *aUserRecord = nil;

NSString *_userName = nil;

   [databaseQueue inDatabase:^(FMDatabase *db) {

        [db open];
        int offset = 0;

        offset +=indexPath.row;

        NSString *str = [NSString stringWithFormat:@"SELECT table_ems_user.pid,\
                         table_ems_user.user_id,\
                         table_ems_user.user_name,\
                         table_ems_user.sex,\
                         table_ems_user.jid,\
                         table_ems_user.signature,\
                         table_ems_user.head\
                         FROM table_ems_user order by name_spell limit %d,1",offset];
        FMResultSet *_rs = [db executeQuery:str];
        while ([_rs next]) {
            aUserRecord = [_rs resultDictionary];
        }
        [_rs close];
        [db close];
    }];

    aCell.textLabel.text = [aUserRecord objectForKey:@"user_name"];

}

你可以看到,从数据库读取和设置单元格的标签; 与仪器,滚动tableview中时,内存分配显着增加(从800K上升,达到160万很快),但如果你对此有何评论行aCell.textLabel.text = [aUserRecord objectForKey:@“USER_NAME”]; 似乎没有太大的内存泄漏比以前的情况下,(从800K至900K左右)。

通过注释的行,我们还是做数据库的工作,它在这里怪,一定是有事情链接的单元格,数据库或块,这让整个事情坏。

我检查RS的保留计数,aUserRecord他们是1,并且似乎正常。 在块中的任何专家,DB和FMDB请分享您的意见,欢呼

编辑:FMDB inDatabase功能管理模块中的调度队列过程中,我试图删除块,只需用分贝来完成这项工作,内存问题仍然存在,请帮助

Answer 1:

也许这可以帮助。 只是猜测。

aCell.textLabel.text = [NSString stringWithFormat:@"%@", [aUserRecord objectForKey:@"user_name"]];


文章来源: ios fmdb memory leaks