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);
}

私はこの関数を絶えず呼び出しています。「プロファイル」ウィンドウの「LivingBytes」列でもメモリが増加していることがわかります。

でもコメントしたら

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

メモリはこれ以上増加しません。

' Label.text 'の何が問題になっていますか?

4

1 に答える 1

0

text要するに、 のプロパティを設定しても、UILabelこの動作は説明できません。ここで取り上げた一連の提案を実行したいと思います。具体的には、リークを探します。何も見つからない場合は、割り当てツールを使用して、何が作成されているか (明らかに解放されていないか) を特定します。また、ブレークポイントを配置してpo [[UIWindow keyWindow] recursiveDescription]から、デバッガーに「」と入力し、ウィンドウ階層に追加のビュー/コントロールが追加されていないことを確認します。

これが満足のいく答えのように感じられないことはわかっていますが、Instruments で少し時間をかけてリークを探し、明らかでない場合は明らかに解放されていない割り当てを特定する必要があります。

于 2013-01-13T06:33:59.523 に答える