Время, проведенное во сне, эффективно бесплатно. В инструментах посмотрите на «бегущие сэмплы», а не на «все сэмплы». Но это все еще не идеальное решение.
Во-первых, ваш интервал сна сумасшедший. Вы действительно нуждаетесь в зернистости. 1 мкс? Система почти наверняка не дает вам, потому что процессор не такой быстрый. Я должен верить, что ты мог довести это до 0,1 или 0,01. Но это все еще напряженное ожидание, которое не идеально, если вы можете помочь ему.
Лучшее решение - использовать NSCondition
. В этом потоке дождитесь условия, а в потоке обработки запустите условие, когда есть место для записи.
Будьте осторожны с именами. Не называйте методы с начальными заглавными буквами (это указывает на то, что это имя класса). И избегайте прямого доступа к ivars (InActive), как это. «InActive» также очень запутанное имя. Означает ли это, что система активна (In Active) или не активна (неактивна). Называние в Objective-C чрезвычайно важно. Компилятор не защитит вас так, как в C # и C ++. Хорошее наименование - это то, как вы поддерживаете свои программы, и многие части ObjC полагаются на это.
Возможно, вы также захотите изучить Grand Central Dispatch, которая специально разработана для такого рода проблем. Посмотрите на dispatch_async()
, чтобы запустить все, когда поступят новые данные.