Каким должен быть retainCount при возврате объекта в Objective-C? - PullRequest
0 голосов
/ 14 марта 2010

Смотрите заголовок. Чтобы быть более точным, я пытаюсь вернуть mutableCopy объекта, однако он возвращается с retainCount, равным 1, и я беспокоюсь, что он утечет.

Ответы [ 2 ]

10 голосов
/ 14 марта 2010

Ваш метод должен следовать стандартным процедурам управления памятью. Если ваш метод возвращает объект, но не содержит слов «alloc», «new», «copy», «create» или «retain», объект должен быть автоматически освобожден.

Если оно содержит одно из этих слов, то оно должно быть возвращено с сохранением +1.

Например:

//return an autoreleased object, since there's no copy, create, retain, alloc, or new
- (id) doSomethingWithFoo:(id)foo {
  id fooCopy = [foo copy];
  [fooCopy doTheNeedful];
  return [fooCopy autorelease];
}

//return a +1 object, since there's a copy in the name
- (id) copySomethingWithFoo:(id)foo {
  id fooCopy = [foo copy];
  [fooCopy doTheNeedful];
  return fooCopy;
}
0 голосов
/ 14 марта 2010

mutableCopy всегда увеличивает значение retainCount объекта. Поэтому, если вы используете retain, copy или mutableCopy, вы должны освободить их методом dealloc.

Если вы возвращаете этот объект, вы должны использовать авто-релиз, например:

[[[NSString alloc] initWithString:@"Test"] autorelease];

Автозапуск пула освободит объект для вас, и нет необходимости освобождать в методе dealloc.

Надеюсь, это поможет вам.

...