iOS: утечка памяти - PullRequest
       17

iOS: утечка памяти

3 голосов
/ 25 января 2012

В классе Utilities у меня есть следующий метод:

+ (Division *) getNationalDivision
{
    Division *defaultDivision = [[[Division alloc] init] autorelease];
    defaultDivision.Id = 0;
    defaultDivision.name = @"National";

    return defaultDivision;
}

В моем делегате приложения выделено деление для хранения деления во всем приложении, поэтому в одном из моих контроллеров представления у меня есть:

appDel.currentDivision = [[Utilities getNationalDivision] retain];

В приложении делегат .h У меня есть:

@property (nonatomic, retain) Division *currentDivision;

В приложении делегат .m У меня есть:

currentDivision = [[Division alloc] init];

Когда я анализирую, я получаю потенциальную утечку объекта, который указывает на вышеуказанную линию. Есть идеи? Если я не сохраню национальное разделение, это не работает. Кроме того, просто чтобы отметить, все работает отлично. Я просто хочу убедиться, что я не пропускаю что-то.

Ответы [ 2 ]

2 голосов
/ 25 января 2012

Сохранение выполняется методом доступа к синтезированным свойствам. Удалить его.

1 голос
/ 25 января 2012

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

 currentDivision = [[Division alloc] init];

не получит released при выполнении:

 appDel.currentDivision = [[Utilities getNationalDivision] retain];

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

[app.currentDivision release];

Это имеет смысл только в том случае, если ваша собственность объявлена ​​как assign.

В случае, если он объявлен как retain, значит, ошибка на линии:

 appDel.currentDivision = [[Utilities getNationalDivision] retain];

, где вы не должны делать удержание вручную.

...