Нужен ли пул авто-релиза, если я не создаю авто-релизные объекты? - PullRequest
7 голосов
/ 21 февраля 2011

Я имею в виду, если бы я был абсолютно уверен, что не создавал автоматически выпущенные объекты, то, конечно, это не так.Мое настоящее беспокойство, есть ли что-нибудь еще под капотом, я не понимаю.У меня есть фоновый поток, который вызывает функцию.В любом случае, я всегда должен создавать пул автоматического выпуска?

- (void)someFuncOnABackgroundThread
{
    //don't seem to need this. no leaks found
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    //do something that doesn't create any objects, or only use alloc/init/release

    NSString* str = [[NSString alloc] init];
    [str release];
    [pool drain];
}

Ответы [ 2 ]

3 голосов
/ 21 февраля 2011

Да!Ты должен.Возможно, вы вызываете функцию, которая внутренне использует пулы автоматического выпуска, поэтому вы никогда не узнаете, используете ли вы автоматический выпуск или нет.

Удачи!

1 голос
/ 21 февраля 2011

в конечном счете, это зависит от интерфейсов, которые вы используете в реализации.

пример 1

если вы взаимодействуете с Foundation или другими типами объектов, вам следует. без вопросов.

, чтобы ответить на конкретный пример, который вы опубликовали: определенно создайте его в этом случае - NSString apis должен предполагать, что пул авто-релиза существует.

пример 2

если вы имеете дело полностью с apis в libc, в этом нет необходимости.

нижняя строка

  • Понадобится много времени, чтобы понять, где это необходимо (или нет).

  • реализации могут изменяться, и они могут вводить объекты с автоматическим освобождением.

  • Вы должны гарантировать, что утечка никогда не возникает, особенно по такой простой причине.

  • эту простую проблему решить: если сомневаешься, создай ее.

...