#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 не сохраняется / не освобождается.