Основные данные iOS, как они могут утекать? - PullRequest
0 голосов
/ 30 октября 2010

Я анализировал свое приложение на предмет утечек, и я заметил, что какой-то основной объект данных просачивается, как может утечка NSManagedObject? Я думал, что это управляется операционной системой? Есть ли известные утечки в основных данных? Линия, которая, по словам Утечки, вызывает утечку

NSMutableArray *e=[NSMutableArray  arrayWithArray:[[user videos] allObjects]];
    //the line above ^ is pointed to by leaks as generating a leak
for(VideoEntity * v in e)
{
    UploadThread *ut= [[UploadThread alloc] init];
    [ut setVideoEntity:v];
    [threads addObject:ut];
    [ut release];
}

Где пользователь - это управляемый объект, который содержит VideoEntity в качестве отношения ко многим, и я назначаю VideoEntity некоторым потокам для работы ... Утечки говорят, что VideoEntity утечка.

У кого-нибудь есть вход?

Ответы [ 2 ]

1 голос
/ 30 октября 2010

Управляемые объекты, имеющие отношения, имеют неявные циклы сохранения (т. Е. Обе стороны отношения сохраняют свои объекты).Как только вы ошибаетесь в отношениях, вы создаете этот цикл сохранения.Чтобы сломать его, вам нужно вызвать -[ManagedObjectContext refreshObject:mergeChanges:], чтобы повторно вызвать неисправность объекта и разорвать циклы сохранения.

Для получения дополнительной информации см. Раздел управления памятью Руководство по программированию основных данных .

Также, как примечание, если вы отправляете экземпляры управляемых объектов через потоки, вы не должны этого делать.Вместо этого вы должны использовать идентификатор объекта (они безопасны для потоков).

1 голос
/ 30 октября 2010

UploadThread может сохранить его и никогда не выпускать. Да, NSManagedObjects может просочиться. Они просто объекты. Они являются частью того же управления памятью, что и остальная система.

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