Я реализовал следующую 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 раз больше, чем раньше.
Почему так медленно?