В разделе «Установка размера стека потока» в Руководстве по программированию потоков Apple, стр. 27 написано:
В iOS и Mac OS X v10.5 и более поздних версиях выделите и инициализируйте
NSThread объект (не используйте detachNewThreadSelector: toTarget:
withObject: метод)
Несмотря на то, что на странице 22 говорится, что detachNewThreadSelector
- это один из способов создания потоков с использованием NSThread.
И на странице 23 приведен пример того, как запустить ваш поток:
NSThread* myThread = [[NSThread alloc] initWithTarget:self selector:@selector(myThreadMainMethod:) object:nil];
[myThread start];
Согласно руководству, которое создаст отдельный поток в вашем приложении. Попробуйте создать свою ветку таким образом и посмотрите, перестанет ли ОС прерывать вашу ветку.
Для справки вот ссылка на руководство
http://developer.apple.com/library/ios/iPad/#documentation/Cocoa/Conceptual/Multithreading/CreatingThreads/CreatingThreads.html#//apple_ref/doc/uid/10000057i-CH15-SW2
На странице 29 также упоминается, что если ваше приложение использует модель управляемой памяти, что, по-видимому, и есть, создание пула автоматического выпуска в подпрограмме входа в поток должно быть первым, что вы делаете, и аналогичным образом уничтожение его последним, что делает ваш поток. , Не уверен, что отсутствие этого приведет к уничтожению вашего потока, но убедитесь, что вы делаете это.
Наличие блока try / catch в подпрограмме входа в поток может не решить проблему уничтожения, но предотвратит выход вашего приложения, если в вашем потоке произойдет ошибка.
Я забыл упомянуть этот другой совет по дизайну, который может помочь вам с ограниченностью ресурсов, как упоминал Дункан. Согласно путеводителю стр. 18:
Избегайте общих структур данных
Самый простой и легкий способ избежать ресурсов, связанных с потоками
конфликты, чтобы дать каждому потоку в вашей программе свою собственную копию
любые данные, которые ему нужны. Параллельный код работает лучше всего, когда вы минимизируете
общение и конфликт ресурсов между вашими потоками.
Что, я думаю, вы можете сделать это в своем приложении. В дополнение к выполнению того, что упомянул Дункан, «не предоставляйте ресурсы непосредственно объекту AVPlayer, а вместо этого предоставьте экземпляр AVPlayerItem», создавайте отдельные экземпляры для каждого из ваших потоков, один экземпляр AVPlayerItem для потока проигрывателя и один экземпляр AVPlayerItem для вытяжная нить.