Многопоточная разработка iPhone, NSAutoreleasePool
-
19-09-2019 - |
Вопрос
У меня есть простое приложение, которое ведет обратный отсчет до полуночи, а затем снова и снова воспроизводит звуковой сигнал и мигает метка, показывающая время.Таким образом, мигающая метка использует NSTimer , в то время как звуковой сигнал передается в ее собственном потоке, так что функция чистого C (для обратного вызова завершения системного звукового идентификатора) может использовать [NSThread sleepForTimeInterval:...];немного подождать между воспроизведением звукового сигнала будильника.Итак, я получаю два сообщения об ошибках во время выполнения, в которых говорится, что пула авторелизов нет, и он просто утечет.Это потому, что в методе, который я вызываю в новом потоке, есть две @"Строки", которые используются для создания системного звукового идентификатора (имя файла и расширение).Есть ли способ, которым я не могу использовать пул автоматического выпуска, поскольку это единственные две вещи, которые когда-либо пытались его использовать.Спасибо.
Или я должен использовать два NSTimers вместо другого потока ..?
Ответ Бена Готлиба был правильным, однако я решил использовать вместо этого другой NSTimer, потому что я забыл о том, что он на самом деле не синхронизирован со временем, когда вы переводите поток в спящий режим, в качестве фактического выполнения кода, прежде чем это займет немного времени.И это делает вещи симметричными ;).
Решение
Просто создайте пул автоматического выпуска в вашем потоковом методе:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
... тело резьбы...
[pool release];