цель c - Предупреждение «Потенциальная утечка объекта», созданная методом класса - PullRequest
0 голосов
/ 20 июля 2011

Я использую XCode 4.0.2 для проекта iOS4.

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

enter image description here

Однако при запуске инструмента анализа это выдает предупреждение «Потенциальная утечка объекта» дляобъект c.

Должен ли я быть обеспокоен?Как я могу это исправить?

Спасибо

Ответы [ 2 ]

4 голосов
/ 20 июля 2011

Вы должны прочитать Руководство по программированию управления памятью , предоставленное Apple.

Вы должны добавить к имени метода (+[XYZ A] в данном случае) префикс new, чтобы было ясно, что вызывающие вас методы знают, что они ответственны за освобождение объекта, который они получают. Вы бы переименовали метод в +[XYZ newA].

Если вы не хотите переименовывать свой метод, вы должны хотя бы вернуть автоматически выпущенный объект, например, измените последнюю строку на return [c autorelease];

3 голосов
/ 20 июля 2011

Каждый раз, когда вы используете этот метод, он создает новый экземпляр XYZ с помощью (устаревшего) метода +new.

Если вам нужен один объект класса XYZ, который сохраняется до конца приложения, вам нужно будет внести некоторые изменения. Самый простой способ - создать этот объект при инициализации класса. В файле .m для любого класса, который мы смотрим здесь, добавьте следующее:

static XYZ *instance = nil;

+ (void)initialize {
    if (self != [ThisClass class])
        return;

    instance = [[XYZ alloc] init];
    instance.X = ...;
    instance.Y = ...;
    instance.Z = ...;
}

А затем ваш A метод:

+ (XYZ *)A {
    return instance;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...