1

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

在 .h 文件中

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

在 .m 文件中

-(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;

内存不会再增加了。

' Label.text ' 有什么问题?

4

1 回答 1

0

最重要的是,为 a 设置text属性UILabel并不能解释这种行为。我倾向于浏览一下这里提到的一系列建议。具体来说,寻找泄漏,如果你没有找到任何泄漏,使用分配工具来识别正在创建的内容(并且显然没有发布)。我还设置了一个断点,然后po [[UIWindow keyWindow] recursiveDescription]在调试器中键入“”,并确保您没有将其他视图/控件添加到您的窗口层次结构中。

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

于 2013-01-13T06:33:59.523 回答