Добавление подпредставлений в UiScrollView .. плавно - PullRequest
2 голосов
/ 25 мая 2009

Я пытаюсь динамически добавлять подпредставления в UiScorllView в режиме реального времени (для экономии памяти).

Это приводит к зависанию вида прокрутки на короткую секунду ... как это обойти?

Любые намеки приветствуются

Ответы [ 2 ]

3 голосов
/ 25 мая 2009

Узнайте, как UITableView решает эту проблему. Ваши самые высокие показатели производительности здесь - это распределение и первоначальный отрисовка подпредставления, но в первую очередь это распределение. UITableView s используют идентификатор повторного использования и кучу в памяти, чтобы сохранить все свои ячейки в памяти во время прокрутки, чтобы он мог просто повторно использовать уже выделенные ячейки вместо перераспределения новых каждый раз, когда новая ячейка прокручивается в видимую область область.

Возможно, вы могли бы внедрить собственную систему повторного использования подпредставлений, чтобы сэкономить все это время. Опять же, прочитайте, в частности, как это делает UITableView, и смоделируйте свое от этого. К сожалению, на самом деле нет более простого решения, чем то, о котором я могу подумать.

2 голосов
/ 25 мая 2009

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

Вы можете сделать это либо NSThread, либо реализовать NSOperationQueue.

Декларация NSThread проста;

[NSThread detachNewThreadSelector:@selector(myFunction:) toTarget:myObject withObject:argumentObject];

Где «myFunction» следует заменить именем функции, «myObject» - с объектом (или просто указать self, если вы хотите, чтобы текущий класс обрабатывал поток), а «argumentsObject» следует заменить на любой объект, который вы хотите передать в качестве аргумента; это может быть nil

Сама функция должна выглядеть так:

-(void)myFunction {
   NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init];
   // do your thing here...
   [pool release];
}

Каждый поток должен иметь пул автоматического выпуска.

Один намек; если ваше подпредставление должно анимироваться, попробуйте объявить UIAnimation block

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...