вернуть NSString без утечки памяти? - PullRequest
0 голосов
/ 04 марта 2010

что лучше в следующем?

-(NSString *)send
{
  NSString *str = @"hai";
  return [str retain];
}
-(NSString *)send
{
  NSString *str = @"hai";
  return [[str retain] autoRelease];
}

Ответы [ 2 ]

2 голосов
/ 04 марта 2010

Как правило, вы должны возвращать автоматически выпущенные объекты, если только для этого нет веской причины. Таким образом, вызывающая сторона никогда не отвечает за освобождение объектов, а сама не выделяет их. Если строка, которую вы получаете от какой-либо другой функции, не является автоматически выпущенной, тогда непременно вызовите для нее [autorelease].

2 голосов
/ 04 марта 2010

Это лучше:

-(NSString *)send {
return @"hai";
}

Ваше второе предложение, т. Е. [Сохранить + аврорелиз], не имеет смысла. И хотя в этом нет ничего плохого, во-первых, это плохо для соглашения об именах: он возвращает сохраненный экземпляр, хотя метод не описывает, что он делает, с включением в его имя метода copy / retain / alloc.

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