Как я должен избежать этого предупреждения памяти? - PullRequest
5 голосов
/ 25 августа 2011

У меня есть метод, который возвращает CGPath и генерирует предупреждения анализатора. Метод объявлен в протоколе. Вот пример реализации, которая генерирует предупреждение:

«Потенциальная утечка объекта, выделенного в строке 47 и сохраненного в« пути »»:

- (CGPathRef)createPathForBounds:(CGRect)bounds key:(NSString *)key;
{
    if ([key isEqualToString:OvalColumn])
    {
        CGPathRef path = CGPathCreateWithEllipseInRect(bounds, NULL);
        return path;
    }

    return NULL;
}

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

CGPathRef path = [self.delegate createPathForBounds:bounds key:someKey];

// Use the path to do some drawing

CGRelease(path);

Мое управление памятью правильно; Я возвращаю оставшийся CGPath из моего метода протокола и освобождаю его в вызывающем блоке, поэтому я знаю, что предупреждения можно игнорировать, но я бы хотел удалить их полностью.

Я пропускаю соглашение об именах, которое сделает анализатор счастливым? Можно ли определить функции в протоколах? Как будет работать подклассы?

1 Ответ

5 голосов
/ 25 августа 2011

- (CGPathRef)newPathForBounds:(CGRect)bounds key:(NSString *)key

подробное примечание по теме можно найти здесь

в качестве альтернативы, вы могли бы использовать атрибут cf_returns_retained, но лучше всего (imo) придерживаться соглашений об именах.

...