1

私のアプリケーションでは、NSMutableArrayでSQLクエリの結果を直接返す1つのライブラリを使用しています。インストルメントを使用すると、結果が格納されている配列のメモリリークが表示されます。したがって、ライブラリの作成者はinit-を処理していません。配列を適切にリリースします。コード内のライブラリの外部でその配列によって引き起こされたメモリリークを処理する方法はありますか?コードは次のとおりです。

-(void)getRecurringDataFromDatabase
{
     SafeRelease(_arrTblList);
    _arrTblList=[[NSMutableArray alloc]init] ;

    NSError *error = nil;
    NSString *strQuery = [NSString stringWithFormat:@"select * from wt_transaction as w  where w.subcat_id in (select s.subcat_id from subcategory as s where s.subcat_type = 'expense' and IsRepeat = 1)"];
    NSMutableArray *arrExpense = [NSMutableArray requestWithSynchronousQuery:strQuery withReturnningError:&error] ;

    NSString *strQuery1 = [NSString stringWithFormat:@"select * from wt_transaction as w  where w.subcat_id in (select s.subcat_id from subcategory as s where s.subcat_type = 'income' and IsRepeat = 1)"];
    NSMutableArray *arrIncome = [NSMutableArray requestWithSynchronousQuery:strQuery1 withReturnningError:&error];
    if (error) {
        [AppDelegate showAlert:[error description] withTitle:@"Error!"];
    }
    else{
        if ([arrExpense count]>0)
        {
            [_arrTblList addObject:arrExpense];
        }
        if ([arrIncome count]>0) 
        {

            [_arrTblList addObject:arrIncome];
        }
         _reloadCell = YES;
        [_tblView reloadData];
    }

ここでは、arrIncomeとarrExpenseのメモリリークが示されています。これらのアレイを解放または自動リリースしても、メモリリークは解決されません。これらのリークを解決する唯一の方法は、ライブラリの作成者が解決できるかどうかです。また、もしも

(indexPath.row == 0) {
        OverviewViewController *obj1 = [[OverviewViewController alloc] initWithNibName:@"OverviewView" bundle:nil];
        [self.navigationController pushViewController:obj1 animated:YES];


        [obj1 release];
    } this code at line    [self.navigationController pushViewController:obj1 animated:YES];
     .how to resolve this leak?
4

2 に答える 2

2

それらを複数回リリースしてみましたか?好き:

[array release];
[array release];

通常はお勧めしませんが、ライブラリがそれらを不適切に保持して返す場合は、これで問題が解決する可能性があります。それらの配列のretainCountプロパティを調べて、それらが保持される回数を確認してください。このプロパティは主にデバッグに役立ち、奇妙な結果をもたらす可能性があることを覚えておいてください。

このアプローチを使用する場合は、安定性を広範囲にテストする必要があります。

于 2012-02-21T07:44:20.237 に答える
1

使用しているライブラリが何であれ、それは本当に不十分に設計されているようです。具体的には、データベースアクセスを実行するためにNSMutableArray(またはNSArray)にカテゴリを固定することは、ひどいアンチパターンです。

同様に、コードにはいくつかの深刻な問題があります。 エラーが発生したかどうかを直接getチェックして間違っているなど、プレフィックスとして使用しないでください。error

最後に、リークは、実際のリークが発生した場所ではなく、リークが割り当てられた場所を示します。ライブラリに過剰保持のバグがある場合は、それを修正する(またはライブラリを置き換える)必要があり、ハッキングを試みないでください。

于 2012-02-22T18:18:26.700 に答える