SQLiteデータベースで一括挿入を実行するループを反復処理しているときに、メモリベースの厳密な問題が発生しています。
私はこれがメモリに関係していると確信しており、問題を引き起こしている変数を指摘することはできません。確認できる範囲で割り当てられたものをすべて解放しました。
機器を介して分析されたこの時点まで、メモリリークはありません。コードのスニペットは次のとおりです。
int m=0;
while ([arrData count]!=0) {
if (newQuery) {
exeQuery = query;
newQuery = false;
}
else
{
exeQuery=[exeQuery stringByAppendingFormat:@" UNION"];
}
NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithDictionary:[arrData objectAtIndex:0]];
[data removeObjectForKey:@"statement"];
[data removeObjectForKey:@"datetime_stamp"];
NSString *strVal=@"";
NSString *_value=@"";
int i=0;
for(;i<[keys count]-1;i++)
{
if(_value==nil || _value==NULL){
_value=@"";
}
_value=[NSString stringWithFormat:@"%@",[data objectForKey:[keys objectAtIndex:i]]];
_value=[_value stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
strVal=[strVal stringByAppendingFormat:@"'%@',",_value];
}
if(_value==nil || _value==NULL){
_value=@"";
}
_value=[NSString stringWithFormat:@"%@",[data objectForKey:[keys objectAtIndex:i]]];
_value=[_value stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
strVal=[strVal stringByAppendingFormat:@"'%@'",_value];
exeQuery=[exeQuery stringByAppendingFormat:@" SELECT %@",strVal];
if (m!=0 && m%499==0) {
[DataSource executeQuery:exeQuery];
//db.execute(exeQuery);
newQuery = true;
}
[data release];
[arrData removeObjectAtIndex:0];
m++;
}
for (;m<locations_length; m++) {
if (newQuery) {
exeQuery = query;
newQuery = false;
}
else
{
exeQuery=[exeQuery stringByAppendingFormat:@" UNION"];
}
NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithDictionary:[arrData objectAtIndex:m]];
[data removeObjectForKey:@"statement"];
[data removeObjectForKey:@"datetime_stamp"];
NSString *strVal=@"";
NSString *_value=@"";
int i=0;
for(;i<[keys count]-1;i++)
{
if(_value==nil || _value==NULL){
_value=@"";
}
_value=[NSString stringWithFormat:@"%@",[data objectForKey:[keys objectAtIndex:i]]];
_value=[_value stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
strVal=[strVal stringByAppendingFormat:@"'%@',",_value];
}
if(_value==nil || _value==NULL){
_value=@"";
}
_value=[NSString stringWithFormat:@"%@",[data objectForKey:[keys objectAtIndex:i]]];
_value=[_value stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
strVal=[strVal stringByAppendingFormat:@"'%@'",_value];
exeQuery=[exeQuery stringByAppendingFormat:@" SELECT %@",strVal];
if (m!=0 && m%499==0) {
[DataSource executeQuery:exeQuery];
//db.execute(exeQuery);
newQuery = true;
}
[data release];
}
どんな助けでも大歓迎です。Plzが手を組む..!
前もって感謝します。