NSOperation :addsubview в основном потоке и медлительность

Я реализовал следующую NSOperation для рисования Nпользовательских представлений

- (void)main {

    for (int i=0; i<N; i++) {

       << Alloc and configure customView #i >>
       //(customView is a UIView with some drawing code in drawrect)

       [delegate.view addSubview:customView];

    }

    NSLog(@"Operation completed");
}

в методе drawRect у меня есть customView

- (void)drawRect {

    <<Drawing code>>

    NSLog(@"Drawed");
    delegate.drawedViews++;

    if (delegate.drawedViews==VIEWS_NUMBER) {
        [delegate allViewsDrawn];
    }
}

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

Проблема в том, что после лога «Операция завершена» проходит около 5 секунд, прежде чем я смогу увидеть первый лог «Нарисованный».

Почему это происходит? И вообще, как мне себя вести, чтобы узнать, какая строчка кода выполняется столько времени?

------РЕДАКТИРОВАТЬ------

Иногда (как 1 из 10 раз )У меня были сбои при этом, потому что я не должен вызывать addsubviewиз NSOperation, так как это не потокобезопасно. Поэтому я изменил на

[delegate.view  performSelectorOnMainThread:@selector(addSubview:) withObject:customView waitUntilDone:NO];

Теперь у меня больше нет сбоев, но процесс выполняется очень долго! Нравится в 5 раз больше, чем раньше.

Почему так медленно?

5
задан Abramodj 18 May 2012 в 11:29
поделиться