Необъяснимые утечки с использованием CFDictionaryRef и ABMutableMultiValueRef - PullRequest
0 голосов
/ 23 октября 2009

Следующий код создает ряд утечек, которые я не понимаю, когда освобождаю все объекты, созданные с помощью Create или Copy. Я не много работал с объектами CF, поэтому у меня может быть неправильное понимание цикла хранения. Любая помощь будет оценена, пожалуйста:

ABMutableMultiValueRef webServices = ABRecordCopyValue(aRecord, kABPersonInstantMessageProperty);

    for (CFIndex i = 0; i < ABMultiValueGetCount(webServices); i++) { 

        CFDictionaryRef webService = CFDictionaryCreateCopy(NULL, ABMultiValueCopyValueAtIndex(webServices, i));

        webServiceLabel = ABMultiValueCopyLabelAtIndex(webServices, i);

        webServiceProvider = CFDictionaryGetValue(webService, kABPersonInstantMessageServiceKey);
        webServiceUserName = CFDictionaryGetValue(webService, kABPersonInstantMessageUsernameKey);

        // Data to be saved at this point
        if (webService) CFRelease(webService);
        if (webServiceLabel) CFRelease(webServiceLabel);
    }

    if (webServices) CFRelease(webServices);

Ответы [ 2 ]

3 голосов
/ 23 октября 2009

Вот ваша проблема:

CFDictionaryRef webService = CFDictionaryCreateCopy(NULL, ABMultiValueCopyValueAtIndex(webServices, i));

ABMultiValueCopyValueAtIndex создает объект, который никогда не назначается переменной. Это должно быть выпущено, но никогда не будет. Это утечка памяти.

0 голосов
/ 23 октября 2009

Я запускаю симулятор вот так

MallocStackLogging=1 /Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone\ Simulator.app/Contents/MacOS/iPhone\ Simulator

затем запустите приложение, затем запустите leaks appname.

Я поместил ваш код в тестовое приложение и не мог видеть, что происходит на самом деле, несколько «утечек» в виде выделений глубоко в основании или в коде какао.

Не могли бы вы запустить свое приложение с вышеприведенным и показать утечки, которые можно отследить с помощью метода, выполняющего приведенный выше код?

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