В моем приложении 3 утечки памяти, и я не могу найти, как это исправить.Я немного новичок в xcode и цели c.Вот код, который у меня есть:
if(sqlite3_prepare_v2( [[DatabaseController sharedDatabaseController] getDb], sqlQueryConverted, -1, &dbStatement, NULL)==SQLITE_OK){
//Run the query
while ( sqlite3_step(dbStatement) == SQLITE_ROW )
{
const char *name = (const char *)sqlite3_column_text(dbStatement, 0);
int courseId = sqlite3_column_int(dbStatement, 1);
const char *location = (const char *)sqlite3_column_text(dbStatement, 2);
const char *date = (const char *)sqlite3_column_text(dbStatement, 3);
//Convert the returnedElement char to string
nameConverted = [[NSString alloc] initWithUTF8String:name];
locationConverted = [[NSString alloc] initWithUTF8String:location];
dateConverted = [[NSString alloc] initWithUTF8String:date];
Course *course = [[[Course alloc]initWithName:nameConverted _id:courseId location:locationConverted courseDate:dateConverted] autorelease];
//Add the course to the to a temporary list to remove duplicated items
[tempResults addObject:course];
}
[nameConverted release];
[locationConverted release];
[dateConverted release];
}
Я тоже пытался выпустить его автоматически.Этот код используется для фильтрации поиска и перезагрузки таблицы отображения поиска.Если я добавлю строку release
в оператор while
, приложение будет аварийно завершено, если я введу 2 буквы.Как я могу это исправить?
Спасибо.
РЕДАКТИРОВАТЬ: Я без проблем возвращался к этой проблеме.Я пришел к выводу, что с инструментами что-то не так, потому что он все еще показывает утечки памяти.Вот код, который есть сегодня, и, как я считаю, должен решить проблему:
NSString *nameConverted = [[NSString alloc] initWithUTF8String:name];
NSString *locationConverted = [[NSString alloc] initWithUTF8String:location];
NSString *dateConverted = [[NSString alloc] initWithUTF8String:date];
Course *course = [[[Course alloc]initWithName:nameConverted _id:courseId location:locationConverted courseDate:dateConverted] autorelease];
//Add the course to the to a temporary list to remove duplicated items
[tempResults addObject:course];
course = nil;
[course release];
[nameConverted release];
nameConverted = nil;
[locationConverted release];
locationConverted = nil;
[dateConverted release];
dateConverted = nil;
NSLog(@"course retain count %i",[course retainCount]);
NSLog(@"name coverted retain count %i",[nameConverted retainCount]);
NSLog(@"location coverted retain count %i",[locationConverted retainCount]);
NSLog(@"date coverted retain count %i",[dateConverted retainCount]);
В журналах сообщается, что retainCount = 0;
, поэтому я не понимаю, почему произошла утечка памяти.Ребята, можете дать мне какой-нибудь совет?
Еще раз спасибо.