Имеют ли NSThread те же привилегии памяти, что и основной поток? - PullRequest
1 голос
/ 09 июля 2011

Я использую NSOperationQueue для управления фазой приложения iOS, которая довольно длинная, поэтому я хотел бы управлять ею асинхронно.Внутри этой фазы я выделяю большие массивы в C, используя непосредственно calloc функции.Под большим я имею в виду двумерный массив с плавающей запятой 1024x256 и тому подобные вещи.

Если все находится в основном потоке, то приложение блокируется во время вычислений, но все идет хорошо, если вместо этого я перенесу тяжелую часть вNSInvocationOperation тогда я получил много странных результатов, иногда с помощью отладчика я получаю странное сообщение в консоли о том, что

Нет доступной памяти для программы: небезопасно вызывать malloc

поэтому мне было интересно, имеют ли потоки, управляемые очередью операций, некоторые другие ограничения по сравнению с основным потоком, и в случае, что лучше сделать, чтобы обойти эту проблему.

1 Ответ

1 голос
/ 09 июля 2011

Нет никаких ограничений, о которых я знаю ... однако, вы можете столкнуться с проблемой доступной оперативной памяти.Поскольку iOS не работает с виртуальной памятью, когда памяти становится мало, она отправит предупреждение другим приложениям об освобождении оперативной памяти.Это может быть источником вашей проблемы.

Используйте инструменты для определения объема используемой оперативной памяти.Если это больше, чем около 20 МБ или около того, вы, вероятно, рискуете быть прекращенным из-за чрезмерного использования памяти в любом случае.

...