Я создаю приложение для iPhone, где отсоединяю некоторые потоки, чтобы выполнять длительную работу в фоновом режиме, чтобы не зависать пользовательский интерфейс. Я понимаю, что потоки нуждаются в экземплярах NSAutoreleasePool для управления памятью. В чем я не уверен, так это в том, что многопоточный метод вызывает другой метод - нужен ли этому методу NSAutoreleasePool?
Пример кода:
- (void)primaryMethod {
[self performSelectorInBackground:@selector(threadedMethod) withObject:nil];
}
- (void)threadedMethod {
NSAutoreleasePool *aPool = [[NSAutoreleasePool alloc] init];
// Some code here
[self anotherMethod];
// Maybe more code here
[aPool drain];
}
- (void)anotherMethod {
// More code here
}
Причина, по которой я спрашиваю, состоит в том, что я получаю ошибки, что объекты автоматически высвобождаются без пула и "просто подтекают".
Я видел другие вопросы, где у людей вообще не было пулов авто-релиза, и я понимаю, зачем нужен пул авто-релиза. Я особенно заинтересован в том, чтобы выяснить, применяется ли пул автоматического выпуска, созданный в (в этом примере) threadedMethod
, к объектам, созданным в anotherMethod
.