Утечка памяти в не сохраняющемся массиве

#ios #objective-c #memory-leaks #nsarray

#iOS #objective-c #утечки памяти #nsarray

Вопрос:

В проекте, отличном от ARC, мне нужно использовать не удерживающие массивы. Я взял реализацию из старого фреймворка Three20. Когда я отслеживаю использование памяти с помощью инструментов, это показывает мне утечку для всех моих нераспределенных массивов.

Вот реализация. У вас есть идея?

 static const void* RetainNoOp(CFAllocatorRef allocator, const void *value) { return value; }
static void ReleaseNoOp(CFAllocatorRef allocator, const void *value) { }

NSMutableArray* CreateNonRetainingArray() {
    CFArrayCallBacks callbacks = kCFTypeArrayCallBacks;
    callbacks.retain = RetainNoOp;
    callbacks.release = ReleaseNoOp;
    return (NSMutableArray*)CFArrayCreateMutable(nil, 0, amp;callbacks); // leak here
}
  

Комментарии:

1. Ну, а сам массив вы выпустили позже?

Ответ №1:

release В какой-то момент вы должны вызвать CFArray свой, иначе произойдет утечка. В соответствии с «Правилом создания» вызывающий CreateNonRetainingArray отвечает за его освобождение.

Кстати, не должно быть необходимости передавать RetainNoOp и ReleaseNoOp , поскольку базовое поведение CFArray не сохраняется / не освобождается.