ios是UILabel.文本记忆不断增加



我使用ARC。我发现内存在不断增加。

in .h file

@property (weak, nonatomic) IBOutlet UILabel* contentALabel;
@property (weak, nonatomic) IBOutlet UILabel* contentBLabel;

in .m file

-(void)refreshContent:(NSInteger) itemID
{
    sqlite3 *database;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docsPath = [paths objectAtIndex:0];
    NSString* databasePath = [docsPath stringByAppendingPathComponent: @"Database.sqlite"];
    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
        NSString  *sql = [NSString stringWithFormat:@"select contentA,contentB from tableA where  itemID = %d ",itemID,nil];
        char *sqlStatement = (char *)[sql cStringUsingEncoding:NSASCIIStringEncoding];
        sqlite3_stmt *compiledStatement;
        if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
            while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
                NSString *contentA = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
                NSString *contentB = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
                contentALabel.text = contentA;
                contentBLabel.text = contentB;
            }
        }
        sqlite3_finalize(compiledStatement);
    }
    sqlite3_close(database);
}

我不断调用这个函数,我发现我的内存增加也在"配置文件"窗口的"活字节"列中。

但是如果我注释

contentALabel.text = contentA;
contentBLabel.text = contentB;

内存不再增加。

标签有什么问题?文本"?

底线是,为UILabel设置text属性并不能解释这种行为。我倾向于把这里涵盖的一系列建议通读一遍。具体地说,查找泄漏,如果没有发现泄漏,则使用分配工具来确定正在创建(显然没有释放)的内容。我也把断点,然后输入"po [[UIWindow keyWindow] recursiveDescription]"到调试器,并确保你没有得到额外的视图/控件添加到您的窗口层次结构。

我知道这不是一个令人满意的答案,但是你只需要花一点时间在Instruments中,寻找泄漏,如果不明显,只需要识别明显没有被释放的分配。

最新更新