Upload
ontico
View
62
Download
4
Embed Size (px)
Citation preview
К рас и в о и н е то р м о з и т!
Анимация без ущерба производительности приложений
Сергей Токарев, старший ios-разработчик
Проблемы:
Почему список тормозит?
Почему картинки не отображаются?
Как увеличить скорость отклика приложения?
Немного статистики*
Только
79% пользователей вернутся в приложение ещё один или два раза, если оно упало при первом запуске.
25% пользователей выйдут из приложения, если оно не загрузится за 3 секунды.
31% пользователей расскажет о незапустившемся или упавшем приложении своим друзьям.
*по данным статистики Hewlett Packard Enterprise Software Solutions
Что замедляет GPU
Слишком много геометрических вычислений
Слишком много перерисовок
Закадровые отрисовки
Слишком большие изображения
drawRect()
-(void)drawRect:(CGRect)rect { float fontSize = 13; CGFloat emailWidth = rect.size.width; UIFont *emailFont=[UIFont boldSystemFontOfSize: fontSize]; NSDictionary *attrs = @{ NSFontAttributeName: emailFont }; [self.email drawInRect:CGRectMake(28, 4, emailWidth, 16) withAttributes:attrs];}
ShadowPath
UIView *view = [UIView new];UIBezierPath *path = [UIBezierPath bezierPathWithRect:view.bounds];backgroundView.layer.shadowPath = path.CGPath;
NSThread
SJPhotoModel *model = [SJPhotoModel new];[model performSelectorInBackground:@selector(downloadPhoto) withObject:nil];
Grand Central Dispatchdispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul); dispatch_async(queue, ^(void) { // загрузка фото NSData *imageData = [NSData dataWithContentsOfURL:url]; UIImage* image = [[UIImage alloc] initWithData:imageData]; if (image) { dispatch_async(dispatch_get_main_queue( ), ^{ // преобразование фото }); } });
NSOperation
NSOperation *networkingOperation = …;NSOperation *resizingOperation = …;[resizingOperation addDependency:networkingOperation]; NSOperationQueue *operationQueue = [NSOperationQueue mainQueue];[operationQueue addOperations:@[networkingOperation, resizingOperation] waitUntilFinished:NO];