Расчет размеров строк на iPhone в фоновом потоке
В моем приложении происходят довольно сложные вычисления размера строки (каждое занимает около 500 мс и происходит, когда пользователь переходит на новую "страницу" в моем приложении (например, приложение "Погода"). страница, так как расчет должен быть выполнен только один раз (и даже может быть кэширован для последующих запусков с теми же данными).
В любом случае, мне все еще нравится не блокировать пользовательский интерфейс для этого типа работы, так как для меня это крики с использованием потоков, но я знаю, что UIKit не предназначен для использования из других потоков. (Я знаю, что NSString не является частью UIKit, но методы определения размера строк являются частью UIKitAdditions...)
Итак, как мне это сделать? Какой лучший способ не блокировать пользовательский интерфейс и делать это безопасно?
3 ответа
Рассмотреть возможность использования NSOperation
/NSOperationQueue
, На Cocoa Is My Girlfriend есть учебник, а у Apple есть руководство.
Я всегда использовал -sizeWithFont
и друзья в фоновых потоках для расчета высоты ячеек и т. д. Это работало просто отлично. Однако, начиная с iOS 6.0, это вызывает периодические сбои. Надеюсь, что они будут исправлены, потому что это важная оптимизация производительности для расчета макетов пользовательского интерфейса в фоновом режиме
Возможно, я ошибаюсь, но я считаю, что запрет использования UIKit в других потоках связан с общим способом работы графического интерфейса (будучи однопоточным) и обычно применяется только к ситуациям, в которых затрагивается сам графический интерфейс.
sizeWithFont:
метод на самом деле никак не влияет на GUI, поэтому я не думаю, что возникнет проблема с вызовом этого в другом потоке.
Возможно, iPhone-специалист с большим опытом работы закулисного метода может подтвердить мое мышление или исправить ситуацию.