在我的應用程序中,我在NSMutableArray,NSArray和NSString中得到了內存泄漏。iPhone SDK中的NSMutableArray,NSArray,NSString中的內存泄漏
這是代碼。
NSString *subQuery = [NSString stringWithFormat:@"SELECT %@ FROM tbl_lang WHERE glossary = '%@'",append1,glossaryName];
NSArray *subArray1 = [[[self returnExecuteQuery:subQuery] mutableCopy] autorelease];
[subArray addObjectsFromArray:subArray1];
NSString *columnQuery = [NSString stringWithFormat:@"select AutoID,%@ from tbl_lang where glossary='%@'",lblshortName.text,glossaryName];
NSArray *newArray =[[[self returnExecuteQuery:columnQuery] mutableCopy] autorelease];
[langArray addObjectsFromArray:newArray];
NSMutableArray *tempArray = [[NSMutableArray alloc] init];
for (int i=0; i<[newArray count]; i++) {
NSString *cellText = [[newArray objectAtIndex:i] valueForKey:[NSString stringWithFormat:@"%@",lblshortName.text]];
if (cellText != (NSString *)[NSNull null] && ![cellText isEqualToString:@""]) {
NSString *decodedString3 = [NSString stringWithUTF8String:[cellText cStringUsingEncoding:[NSString defaultCStringEncoding]]];
[tempArray addObject:[NSString stringWithFormat:@"%@ : %@",lblshortName.text, decodedString3]];
}
else {
[tempArray addObject:@"<empty>"];
}
NSString *detail = @"_________________";
for (int j=0; j<[lableNameArray count]; j++) {
NSString *checkNull=[[subArray1 objectAtIndex:i] valueForKey:[NSString stringWithFormat:@"%@",[lableNameArray objectAtIndex:j]]];
if(checkNull != (NSString *)[NSNull null] && checkNull.length > 0)
{
NSString *decodedString4 = [NSString stringWithUTF8String:[checkNull cStringUsingEncoding:[NSString defaultCStringEncoding]]];
detail = [NSString stringWithFormat:@"%@\n%@ : %@ ",detail,[lableNameArray objectAtIndex:j],decodedString4];
}
}
[detailTextArray addObject:detail];
}
當我在儀器運行我在第二行
-subArray1了泄漏。
-detail(NSString)for second for loop。
而subArray和langArray是我的全局數組。
如果我從NSArray *newArray =[[[self returnExecuteQuery:columnQuery] mutableCopy] autorelease];
和NSArray *subArray1 = [[[self returnExecuteQuery:subQuery] mutableCopy] autorelease];
刪除mutableCopy
,則subArray和langArray不會保留值。
如何避免此代碼中的內存泄漏?
是什麼'-returnExecuteQuery:'怎麼辦?它是返回一個擁有的還是非擁有的對象?其合同是否會說明多次調用的返回值有效性? – 2011-04-16 11:12:20
你釋放tempArray嗎?哪裏?此外,嘗試在addObjectsFromArray之後釋放subArray1和newArray(而不是自動釋放它們)。 – Sefran2 2011-04-16 12:05:26
@Fran:我試圖在main for循環之後釋放兩個數組,但它給了我subECray和langArray的EXEC_BAD_ACCESS錯誤。 – Meghan 2011-04-16 12:43:08