Расчет размеров строк на iPhone в фоновом потоке - PullRequest
3 голосов
/ 22 марта 2010

В моем приложении происходят довольно сложные вычисления размера строки (каждое занимает около 500 мс, и происходит, когда пользователь переходит на новую «страницу» в моем приложении (например, приложение Погода). Только задержка. происходит один раз на страницу, так как вычисление необходимо выполнить только один раз (и даже можно кэшировать для последующих запусков с теми же данными).

В любом случае, я все еще хотел бы не блокировать пользовательский интерфейс для этого типа работы, так как для меня это крики с использованием потоков, но я знаю, что UIKit не предназначен для использования из других потоков. (Я знаю, что NSString не является частью UIKit, но методы определения размера строк являются частью UIKitAdditions ...)

Так как мне поступить так? Какой лучший способ не блокировать пользовательский интерфейс и делать это безопасно?

Ответы [ 3 ]

3 голосов
/ 24 августа 2012

Я всегда использовал -sizeWithFont и друзей в фоновых потоках для вычисления высоты ячеек и т. Д. Это работало просто отлично.Однако, начиная с iOS 6.0, он вызывает периодические сбои .Надеюсь, что они будут исправлены, потому что это важная оптимизация производительности для расчета макетов пользовательского интерфейса в фоновом режиме.

2 голосов
/ 22 марта 2010

Рассмотрите возможность использования NSOperation / NSOperationQueue. Есть учебник по Cocoa Is My Girlfriend, а у Apple есть руководство .

2 голосов
/ 22 марта 2010

Я могу ошибаться, но я считаю, что запрет на использование UIKit в других потоках связан с общим способом работы графического интерфейса (будучи однопоточным) и обычно применяется только в ситуациях, когда затрагивается сам графический интерфейс.

Метод sizeWithFont: на самом деле никак не влияет на GUI, поэтому я не думаю, что возникнет проблема с вызовом этого в другом потоке.

Возможно, iPhone-специалист с большим опытом работы за кулисами может подтвердить мои мысли или исправить ситуацию.

...