У меня есть проблема с использованием памяти, относящейся к изображениям, и я искал документы и смотрел видео с cs193p и сайта разработчиков iphone на предмет плотности и производительности памяти. Я искал в Интернете и публиковал сообщения на форумах, но до сих пор не могу понять.
Приложение использует основные данные и просто позволяет пользователю связывать текст с изображением и сохраняет список элементов в табличном представлении, которое позволяет добавлять и удалять элементы. Нажатие на строку показывает изображение и связанный текст. это все.
Все отлично работает на симуляторе и на устройстве. Я запустил анализатор, и он выглядел хорошо, поэтому я начал смотреть на производительность. Я проверил утечки, и все выглядело хорошо. Моя проблема заключается в запуске Object Allocations, поскольку каждый раз, когда я выбираю строку и отображается представление с изображением, текущие байты увеличиваются на несколько МБ и никогда не выключаются, и мое приложение в конечном итоге падает из-за использования памяти. Сортируя столбец живых байтов, я вижу 2 2.72 МБ malloc (всего 5.45 МБ), 14 CFDatas (3.58 МБ всего), 1 2.74 МБ malloc и все остальное очень мало. проблема в том, что вся связанная с инструментами информация действительно техническая, и все примеры решения проблем, которые я видел, просто пропускают релиз и ничего сложного. Instruments показывает Core Data как ответственную библиотеку для всех, кроме одной (libsqlite3.dylib, другой) с [NSSQLCore _prepareResultsFromResultSet: usingFetchPlan: withMatchingRows:] в качестве вызывающей стороны для всех, кроме одной (fetchResultSetReallocCurrentRow другой как), и я просто не уверен в чем проблема. Я посмотрел на следы стека и открыл последний экземпляр моего кода и нашел 2 преступников (ниже). Я не смог получить никаких ответов на этот вопрос, поэтому, если у кого-то есть какие-либо советы или указатели, я был бы очень признателен за это !!!!
//this is from view controller that shows the title and image
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.title = item.title;
self.itemTitleTextField.text = item.title;
if ([item.notes length] == 0)
{
self.itemNotesTextView.hidden = YES;
} else
{
self.itemNotesTextView.text = item.notes;
} //this is the line instruments points to
UIImage *image = item.photo.image;
itemPhoto.image = image;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
// Delete the managed object for the given index path
NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
[context deleteObject:[fetchedResultsController objectAtIndexPath:indexPath]];
// Save the context.
NSError *error = nil;
if (![context save:&error]) //this is the line instruments points to
{
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1);
}
}
}