Две точки;
Минимизация роста кучи
в любом случае, вот как минимизировать рост памяти:
while (something.isAlwaysTrue) {
NSAutoreleasePool * pool = [NSAutoreleasePool new];
// Wait for something to happen. i.e. Get data from an internet connection.
// Respond to something.
[pool release], pool = 0;
}
или, если вы предпочитаете блеющий край (sic):
while (something.isAlwaysTrue) {
@autoreleasepool{
// Wait for something to happen. i.e. Get data from an internet connection.
// Respond to something.
}
}
пулы с автоматическим выпуском просто работают как локальные стеки потоков. когда вы выдвигаете пул, автоматически высвобождаемые объекты добавляются в верхний пул в текущем потоке. когда вы извлекаете пул, пул отправляет сообщение release
для каждого автоматического выпуска.
использование GCD в качестве заменителя пула авто-релиза является странным; аналогично использованию NSArray
одного символа NSString
s, где вы должны просто использовать один NSString
.
поток многопоточных программ
бесконечный цикл - очень подозрительная программа. это предполагает, что вы, возможно, пытаетесь заново изобрести циклы выполнения. основной цикл выполнения, конечно, распространен. вторичный поток 1) с циклом выполнения 2), который никогда не заканчивается, является необычным.
вам следует пересмотреть ход программы. как правило, вы действуете на события, а не затаив дыхание, опрашивая, пока они не завершатся. возможно, вы пытаетесь выйти из этой ситуации в предложенной вами программе, но мне не хватает деталей.