Проблема с памятью: потенциальная утечка выделенного объекта - PullRequest
0 голосов
/ 05 августа 2011

когда я анализирую свой проект, анализатор Xcode обнаруживает потенциальную утечку выделенного объекта, но проблема в том, что я не знаю, что это значит и как решить эту проблему

вот изображение моего файла

enter image description here

и вот код

#import "RoundRect.h"

//
// NewPathWithRoundRect
//
// Creates a CGPathRect with a round rect of the given radius.
//
CGPathRef NewPathWithRoundRect(CGRect rect, CGFloat cornerRadius)
{
    //
    // Create the boundary path
    //
    CGMutablePathRef path = CGPathCreateMutable();
    CGPathMoveToPoint(path, NULL,
        rect.origin.x,
        rect.origin.y + rect.size.height - cornerRadius);

    // Top left corner
    CGPathAddArcToPoint(path, NULL,
        rect.origin.x,
        rect.origin.y,
        rect.origin.x + rect.size.width,
        rect.origin.y,
        cornerRadius);

    // Top right corner
    CGPathAddArcToPoint(path, NULL,
        rect.origin.x + rect.size.width,
        rect.origin.y,
        rect.origin.x + rect.size.width,
        rect.origin.y + rect.size.height,
        cornerRadius);

    // Bottom right corner
    CGPathAddArcToPoint(path, NULL,
        rect.origin.x + rect.size.width,
        rect.origin.y + rect.size.height,
        rect.origin.x,
        rect.origin.y + rect.size.height,
        cornerRadius);

    // Bottom left corner
    CGPathAddArcToPoint(path, NULL,
        rect.origin.x,
        rect.origin.y + rect.size.height,
        rect.origin.x,
        rect.origin.y,
        cornerRadius);

    // Close the path at the rounded rect
    CGPathCloseSubpath(path);

    return path;

}

Спасибо за вашу очень полезную помощь.

PS: все мои проекты работают нормальнов симуляторе iphone это приложение, с панелью вкладок и разделом 4, два раздела еще пусты, а два других раздела - это табличное представление с подробным представлением (данные выбираются из списка). Когда я тестирую приложение на моем устройстве, двапустые разделы работают отлично, и только один из двух табличных представлений отображает подробный вид, второй табличный вид, который работает в симуляторе, не давал подробный вид, что меня бесило в том, что оно отлично работает сегодня утром

Вопрос:ограничен ли plist данными, которые он содержит, я имею в виду, что если у него большой список, например, с 500 словарными элементами, это может мешать хорошему отображению приложения?

Спасибо

Ответы [ 2 ]

3 голосов
/ 05 августа 2011

При возврате распределения CF / CG функция должна иметь префикс Create.

т.е. переименуйте вашу функцию CreatePathWithRoundRect() и анализатор перестанет жаловаться.

Обратите внимание, что вы не хотите вступать в сговор с авто-выпуском с типами CG / CF; то есть, следуйте шаблонам, увековеченным структурой, содержащей тип возвращаемого объекта. Таким образом, возвращение объекта сохранения +1 из этой функции имеет смысл.

0 голосов
/ 05 августа 2011

О потенциальной утечке:

похоже, что анализатор интерпретирует ваш метод NewPathWIth.... как вспомогательный конструктор;такой конструктор по соглашению возвращает autorelease s объектов.Так что я думаю, что вы удалите предупреждение анализатора, которое вы должны сделать:

 return [path autorelease];

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

Что касается вопроса о plist, я не думаю, что существует ограничение для plist.Вопрос в том, что вы делаете с этим.Если вы создаете табличное представление с 500 строками, это много, но поскольку табличное представление оптимизировано в отношении управления ячейками, проблем не должно быть.В любом случае требуется больше информации (и, возможно, это второй вопрос, который нужно задать SO).

...