2010-07-23 5 views
0

я сузил проблему утечки памяти до этого конкретного блока кода:Основные данные утечки странно на устройстве, но не имитатор

NSFetchRequest *req = [NSFetchRequest new]; 
NSEntityDescription *descr = [NSEntityDescription entityForName:@"Capture" inManagedObjectContext:dataContext]; 
[req setEntity:descr]; 
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"created_at" ascending:NO]; 
[req setSortDescriptors:[NSArray arrayWithObject:sort]]; 
[sort release]; 
NSError *error; 
NSArray *ret = [dataContext executeFetchRequest:req error:&error]; 
[req release]; 

Этого блок существует в любом методе init или viewDidLoad для просмотра контроллера уровня или два в навигационном контроллере.

Где я запуталась и не знает, что делать то, что я получаю утечки памяти с этим кодом, связанным с CoreGraphics, Foundation, и даже JavaScript Core, но я не уверен в том, как исправить эту проблему (не уверен, что проблема в). Это происходит только при использовании инструментов на устройстве, а не в симуляторе.

[Это не позволит мне опубликовать фотографию инструментов, Так вот фото: http://twitpic.com/27vwm1]

По пути в фоновый режим, моя модель основных данных используются, чтобы иметь свойство, которое провело трансформированный UIImage, но я так как преобразован в NSNumber и перестроил классы объектов для моего проекта. Может ли это иметь какое-то отношение к этому, и есть ли еще один шаг, который мне нужно предпринять при изменении моей модели?

Thx

** Обновление: ** изменился URL для изображения

+0

Ваша ссылка показывает пустую страницу без источника. – TechZen

+0

странно. Я изменил ссылку, попробую сейчас. – Jeof

+0

Хорошо, теперь это работает. – TechZen

ответ

1

Если вы нажмете кнопку источника в нижней панели инструментов и перетащить исходный файл в него, он покажет вам строку в ваш код, где он считает утечку. Если приложение работает, вы можете скопировать адрес объектов, показанных в отладчик и как это:

po 0x1a831 

... и он будет печатать описание объекта по этому адресу.

Скорее всего, ваша утечка возникает из-за побочного эффекта извлечения ваших управляемых объектов. Трансформаторы значения являются общим источником таких утечек, поскольку они создают объекты каждый раз, когда они используются. Я бы посмотрел на сами подклассы управляемых объектов для источника утечки.

+0

Я немного новичок в решении проблем с памятью, поэтому прошу прощения за любое незнание здесь. Но где именно я найду кнопку Source в нижней панели инструментов? В расширенной детали я нашел опцию Source Location, но она не показывает мне ни одного из моего кода - это похоже на то, что все утечки находятся в инфраструктуре по умолчанию и тому подобное. Кроме того - я больше не использую преобразования значений в моих управляемых объектах/данных ядра, а объектные файлы довольно простые и по умолчанию. Я пропустил шаг в переходе от трансформаторов - что-то кэшировано или что-то странное? – Jeof

+0

Черт, я не уверен. Я только что проверил, и новая версия, поставляемая с Xcode 3.2.3, имеет другой интерфейс из предыдущих версий и другой из руководства пользователя Instruments. Раньше оно находилось в нижней части детального вида, но этих кнопок больше нет. – TechZen

+0

Вот как он работал http://stackoverflow.com/questions/1634067/iphone-analyzing-leaks-with-instruments/1639237#1639237 – TechZen

0

У меня такая же проблема в приложении, как и у друга в другом приложении. Мы проверили и перепроверили наш код, и нет ничего плохого в нашей стороне (мы делаем те же основные вещи, что и в примере кода Apple).

Похоже, что есть неприятные побочные эффекты при использовании основных данных на устройстве, что не происходит на симуляторе.

Я потратил много времени на эту проблему, и я нахожусь в том, что проблема действительно в структуре Apple, а не в моем коде. Я думаю, было бы неплохо представить отчет об ошибке для этой проблемы.

Примечание: У меня возникает эта проблема без использования каких-либо настраиваемых или трансформируемых объектов, только строковых атрибутов в управляемых объектах.

0

Согласовано, такая же проблема здесь. Даже если вы просто используете код, созданный мастером, с разделенным представлением и основными данными, он течет! Мне потребовалось некоторое время, чтобы это выяснить. Я набрал бы тонну кода в приложении, и, когда он был готов начать тестирование на утечку, не смог найти источник утечки, поскольку инструменты ничего не указали в моем коде. У меня были те же симптомы, что и у вас. Итак, после нескольких дней комментирования моего кода я решил просто запустить проект шаблона для splitview, пометить основные данные и не добавлять код самостоятельно. Угадайте, что? такая же проклятая утечка. Это происходит только при запуске приложения, и только если вы использовали приложение для добавления элементов. Я удивлен, что это не было исправлено Apple или, по крайней мере, обходным решением. Я единственный, кто использует Core Data с Splitview?

Смежные вопросы