1

Я создаю глубокую изменяемую копию словаря, но по какой-то причине получаю утечку. Я попытался это:Почему возникает утечка при использовании CFPropertyListCreateDeepCopy?

NSMutableDictionary *mutableCopy = (NSMutableDictionary *)CFPropertyListCreateDeepCopy(kCFAllocatorDefault, sectionedDictionaryByFirstLetter, kCFPropertyListMutableContainers); 
self.copyOfSectionedDictionaryByFirstLetter = mutableCopy; 
CFRelease(mutableCopy); 

И это:

copyOfSectionedDictionaryByFirstLetter = (NSMutableDictionary *)CFPropertyListCreateDeepCopy(kCFAllocatorDefault, sectionedDictionaryByFirstLetter, kCFPropertyListMutableContainers); 

Оба быть помечены протечками интерфейса устройством строителя.

Любые идеи?

Спасибо!

+0

Выполняет ли сборку и анализ что-нибудь находит? –

+0

Нет ... к сожалению нет. – Jonah

ответ

1

Я думаю, вы сохранить один из объектов в словаре. Каково количество пропущенных байтов?

+0

Это похоже на это. Я собираюсь продолжить отладку на пару дней, чтобы убедиться. Благодаря! – Jonah

0

Действительно ли вы освобождаете copyOfSectionedDictionaryByFirstLetter в своем методе dealloc?

Вы должны либо сделать:

self.copyOfSectionedDictionaryByFirstLetter = nil; 

Или:

[copyOfSectionedDictionaryByFirstLetter release]; 
copyOfSectionedDictionaryByFirstLetter = nil; // Just for good style 
+0

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

0

Я подозреваю, что ближайший к делу номер NSMutableDictionary сбивает с толку профилировщик. Попробуйте следующее:

CFMutableDictionaryRef mutableCopy = CFPropertyListCreateDeepCopy(kCFAllocatorDefault, sectionedDictionaryByFirstLetter, kCFPropertyListMutableContainers); 
if (mutableCopy) { 
    // NOTE: you MUST check that CFPropertyListCreateDeepCopy() did not return NULL. 
    // It can return NULL at any time, and then passing that NULL to CFRelease() will crash your app. 
    self.copyOfSectionedDictionaryByFirstLetter = (NSMutableDictionary *)mutableCopy; 
    CFRelease(mutableCopy); 
} 
0

Если вы звоните часть ниже несколько раз:

NSMutableDictionary *mutableCopy = (NSMutableDictionary *)CFPropertyListCreateDeepCopy(kCFAllocatorDefault, sectionedDictionaryByFirstLetter, kCFPropertyListMutableContainers); 
self.copyOfSectionedDictionaryByFirstLetter = mutableCopy; 
CFRelease(mutableCopy); 

вы должны изменить его на:

NSMutableDictionary *mutableCopy = (NSMutableDictionary *)CFPropertyListCreateDeepCopy(kCFAllocatorDefault, sectionedDictionaryByFirstLetter, kCFPropertyListMutableContainers); 
[self.copyOfSectionedDictionaryByFirstLetter release]; 
self.copyOfSectionedDictionaryByFirstLetter = mutableCopy; 
CFRelease(mutableCopy); 

Я думаю, что может быть ваша причина утечки ,

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