освобождение объекта после возврата - PullRequest
0 голосов
/ 19 июня 2010

Я использую объект, чтобы получить некоторые значения с ним и вернуть эти значения.Значения, которые будут возвращены, все еще находятся в этом объекте.Вот код:

    XMLErrorParser *xmlErrorParser = [XMLErrorParser alloc];
    [xmlErrorParser parseData: data];
    return xmlErrorParser.errors;

Так как я могу освободить объект xmlErrorParser и вернуть его значения?Спасибо.

Ответы [ 5 ]

6 голосов
/ 19 июня 2010

Просто верните автоматически выпущенную версию объекта errors.

Не вдаваясь в подробности о том, что такое XMLErrorParser, давайте предположим, что errors содержит некоторое NSArray:

XMLErrorParser *xmlErrorParser = [[XMLErrorParser alloc] init];
[xmlErrorParser parseData: data];
NSArray *errors = [[xmlErrorParser.errors retain] autorelease];
[xmlErrorParser release];
return errors;

(Обратите внимание, что вы пропустили инициализацию для объекта анализатора ошибок.)

3 голосов
/ 19 июня 2010
XMLErrorParser *xmlErrorParser = [[XMLErrorParser alloc] init];
[xmlErrorParser parseData: data];
return [xmlErrorParser autorelease].errors;

или лучше

XMLErrorParser *xmlErrorParser = [[[XMLErrorParser alloc] init] autorelease];
[xmlErrorParser parseData: data];
return xmlErrorParser.errors;
1 голос
/ 19 июня 2010

Вот для чего autorelease (возможно, вы забыли init?):

XMLErrorParser *xmlErrorParser = [[[XMLErrorParser alloc] init] autorelease];
[xmlErrorParser parseData: data];
return xmlErrorParser.errors;

Прочтите Руководство по управлению памятьюКакао .


В зависимости от цели вашего метода, вам также может потребоваться сохранить xmlErrorParser.errors.

0 голосов
/ 19 июня 2010

Как насчет - autorelease?

0 голосов
/ 19 июня 2010

Я полагаю, parseData - ваш инициализатор. В этом случае вы можете использовать сообщение autorelease, чтобы сообщить внутреннему пулу автоматического выпуска, что вам больше не нужен объект.

Пример:

XMLErrorParser *xmlErrorParser = [XMLErrorParser alloc];
[[xmlErrorParser parseData: data] autorelease];
return xmlErrorParser.errors;

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

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