Сбой библиотеки гистограммы Core Plot в iOS 8

Я интегрировал библиотеку гистограмм CorePlot в свой проект, но мой график дает сбой из-за утечки памяти, я также включил NSZombieEnabled, но он падает, как мой журнал сбоев, как показано ниже.

* thread #1: tid = 0x38f7f, 0x0529a2e0 libsystem_kernel.dylib`vm_allocate + 18, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=2, address=0xbf78fff8)
    frame #0: 0x0529a2e0 libsystem_kernel.dylib`vm_allocate + 18
    frame #1: 0x00a7e57f libgmalloc.dylib`GMmalloc_zone_malloc_internal + 731
    frame #2: 0x00a7d3fc libgmalloc.dylib`GMmalloc_zone_malloc + 89
    frame #3: 0x00a7d26d libgmalloc.dylib`GMmalloc_zone_calloc + 100
    frame #4: 0x00a7cee4 libgmalloc.dylib`GMcalloc + 58
    frame #5: 0x042e3cc1 libobjc.A.dylib`class_createInstance + 68
    frame #6: 0x0460dbe1 CoreFoundation`__CFAllocateObject2 + 33
    frame #7: 0x0460dd08 CoreFoundation`+[__NSArrayI __new:::] + 40
    frame #8: 0x0460de4c CoreFoundation`-[__NSPlaceholderArray initWithObjects:count:] + 204
    frame #9: 0x01d855b3 QuartzCore`-[CALayerArray copyWithZone:] + 80
    frame #10: 0x042edb45 libobjc.A.dylib`-[NSObject copy] + 41
    frame #11: 0x02b16da1 UIKit`-[UIView(Hierarchy) _makeSubtreePerformSelector:withObject:withObject:copySublayers:] + 200
    frame #12: 0x02b16fe2 UIKit`__85-[UIView(Hierarchy) _makeSubtreePerformSelector:withObject:withObject:copySublayers:]_block_invoke + 162
    frame #13: 0x02b16eb9 UIKit`-[UIView(Hierarchy) _makeSubtreePerformSelector:withObject:withObject:copySublayers:] + 480
    frame #14: 0x02b16fe2 UIKit`__85-[UIView(Hierarchy) _makeSubtreePerformSelector:withObject:withObject:copySublayers:]_block_invoke + 162
    frame #15: 0x02b16eb9 UIKit`-[UIView(Hierarchy) _makeSubtreePerformSelector:withObject:withObject:copySublayers:] + 480
    frame #16: 0x02b16fe2 UIKit`__85-[UIView(Hierarchy) _makeSubtreePerformSelector:withObject:withObject:copySublayers:]_block_invoke + 162
    frame #17: 0x02b16eb9 UIKit`-[UIView(Hierarchy) 

Я также прилагаю свой код GraphView и удаляю Dealloc из кода, но не могу понять причину сбоя.

- (void)generateData:(NSArray *)customerArr  withVisitCounts:(NSArray *)visitCountsArr
{
    NSMutableDictionary *dataTemp = [[NSMutableDictionary alloc] init];

    //Array containing all the dates that will be displayed on the X axis
    dates = [NSArray arrayWithObjects:@"TestData", @"TestData", @"TestData",
             @"TestData", @"TestData", nil];

    //Dictionary containing the name of the two sets and their associated color
    //used for the demo
    sets = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor blueColor], @"Plot 1", nil];

    //Generate random data for each set of data that will be displayed for each day
    //Numbers between 1 and 10
    for (NSString *date in dates) {
        NSMutableDictionary *dict = [NSMutableDictionary dictionary];
        for (NSString *set in sets) {
            NSNumber *num = [NSNumber numberWithInt:arc4random_uniform(10)+1];
            [dict setObject:num forKey:set];
        }
        [dataTemp setObject:dict forKey:date];
    }

    self.data =  [NSDictionary dictionaryWithDictionary:[dataTemp copy]];
    [dataTemp release];

    NSLog(@"%@", data);
}

файлы GraphView также прилагаются

Мой проект - это ARC с новым xcode 6.1.1, но я использую -fno-objc-arc в скомпилированных источниках GraphView, и у меня есть библиотека загрузки из Основная панель графиков на Github


person user366584    schedule 29.01.2015    source источник
comment
Явных проблем не вижу. NSZombieEnabled никогда не освобождает память, используемую вашим приложением, поэтому использование памяти увеличивается каждый раз, когда вы создаете новый объект. Выключите его и посмотрите, не столкнетесь ли вы с проблемами памяти.   -  person Eric Skroch    schedule 30.01.2015
comment
Да, мне все еще не хватает памяти, а проект основан на ARC.   -  person user366584    schedule 30.01.2015
comment
Если этот вызов release компилируется, вы не используете ARC.   -  person Eric Skroch    schedule 30.01.2015
comment
-fno-objc-arc, я использую это в скомпилированном исходном коде GraphView, остальная часть проекта основана на ARC   -  person user366584    schedule 30.01.2015


Ответы (1)


Включите ARC в классе GraphView. Это простое преобразование, и оно исправит пару очевидных ошибок управления памятью (и, возможно, некоторые другие не столь очевидные). Строка [plot.dataSource retain]; эквивалентна [self retain];, поэтому представление никогда не будет освобождено. Кроме того, [dataTemp copy] в -generateData: withVisitCounts: никогда не освобождается.

person Eric Skroch    schedule 30.01.2015
comment
Я попытался включить ARC в классе GraphView и закомментировал [plot.dataSource сохранить]; а также удалил копию dataTemp, но не повезло :( - person user366584; 31.01.2015