Базовые данные странно просачиваются на устройство, но не на симулятор - PullRequest
0 голосов
/ 23 июля 2010

Я сузил проблему утечки памяти до этого конкретного блока кода:

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, но я не уверен, как исправить проблема (не уверен, в чем проблема). Это происходит только при запуске Instruments на устройстве, а не на Simulator.

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

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

Thx

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

Ответы [ 3 ]

1 голос
/ 24 июля 2010

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

po 0x1a831

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

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

0 голосов
/ 27 октября 2010

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

0 голосов
/ 25 августа 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...