Единицы работы
Это означает, что в приложении для системы iOS все вызовы методов, оперирующих любыми объектами UIKit, должны выполняться из одного и того же потока, обычно называемого основным.
Однако совсем другое дело, если доступ к объектам UIKit осуществляется из другого потока! В таком случае вполне возможны необъяснимые, на первый взгляд, программные ошибки, а еще хуже, когда недостатки приложения не устраняются на стадии разработки, а проявляются лишь во время его эксплуатации пользователями. По умолчанию в основном потоке происходят все действия в приложении для системы iOS, в том числе и те действия, которые инициируются событиями от пользователя. По этой причине простые приложения в этом отношении не дают особых оснований для беспокойства. Ведь в этом случае методы-действия уже выполняются в основном потоке. Все приложения, рассматривавшиеся до сих пор в данной книге, выполнялись исключительно в основном потоке, но далее это положение изменится.
Недостаток описанной выше модели поточной обработки заключается в том, что обычному программисту практически невозможно написать безошибочно многопоточный код. Это не критика в адрес данной отрасли или способностей программиста средней руки, а просто наблюдение. Задача организации сложных взаимодействий, которые приходится учитывать в коде, синхронизируя данные и действия во многих потоках, оказывается просто не по плечу большинству людей. Допустим, что 5% всех людей способны вообще программировать. Из этих 5% лишь небольшая часть людей действительно способна решать задачи, связанные с разработкой многопоточных приложений, предназначенных для работы в тяжелом режиме. Однако даже те, кому удавалось успешно справиться с этими задачами, зачастую не советуют следовать их примеру!
К счастью, положение не столь безнадежно. Реализовать параллелизм, не особенно вдаваясь в тонкости многопоточной обработки, вполне возможно. Аналогично возможности выводить данные на экран, не загружая их непосредственно в видеопамять, и читать данные с диска, не обращаясь непосредственно к контроллерам дисков, существуют программные абстракции, позволяющие выполнять код во многих потоках и вообще не требующие много взаимодействовать с потоками непосредственно. Решения, которыми компания Apple рекомендует пользоваться, основываются на принципах разделения длительных задач на единицы работы и постановки этих единиц в очередь на выполнение.
- Дата: 1-01-2015, 11:54