Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2013-05-15 Threads. Why and how.

2013-05-15 Threads. Why and how.

CocoaHeads Tricity

May 15, 2013
Tweet

More Decks by CocoaHeads Tricity

Other Decks in Programming

Transcript

  1. Why we should use thread and how to do it

    with no additional efforts.
  2.  Dominik Haska – Research Software Developer in Jeppesen a

    Boeing Company  9 years of professional programming including 1 year in IOS
  3.  Why ◦ Moore law and physics limitations  How

    ◦ how to use the potentially power of multicore devices easily and properly
  4.  iPhone 1 – 1 CPU 412 MHz  iPhone

    5 – 2 CPU 1300 MHz  iPad 1 – 1 CPU 1000 MHz  iPad 4 (retina) – 2 CPU 1400 MHz
  5.  all animations: ◦ GPU is a massive multiprocessor unit

    ◦ Just use the animation block [UIView animateWithDuration:1.0 animations:^{ firstView.alpha = 0.0; secondView.alpha = 1.0; }];
  6. [UIView beginAnimations:@"ToggleViews" context:nil]; [UIView setAnimationDuration:1.0]; // Make the animatable changes.

    firstView.alpha = 0.0; secondView.alpha = 1.0; // Commit the changes and perform the animation. [UIView commitAnimations];
  7.  Animation block stops user interaction during animation  animateWithDuration:delay:

    options: animations:completion:  UIViewAnimationOptions: ◦ UIViewAnimationOptionAllowUserInteraction ◦ UIViewAnimationOptionBeginFromCurrentState  [self.layer removeAllAnimations];
  8.  CGRect animatedFrame = [self.animatedView.layer.presentationLayer frame];  CGRect targetFrame =

    self. animatedView.frame;  if(animatedFrame.origin.x != 0.0 || animatedFrame.origin.y != 0.0){ CGFloat xMis = animatedFrame.origin.x – targetFrame.origin.x; CGFloat yMis = animatedFrame.origin.y - targetFrame.origin.y; [fix the position]; }
  9.  Create property with quee ◦ [NSOperationQueue new];  Create

    invocation ◦ NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(calculate) object:nil];  Add operation to quee ◦ [self.renderingQueue addOperation:operation];  Or remove (cancelAllOperations)
  10.  Some code have to be executed in main thread

    ◦ [NSString sizeWithFont] – sometimes – once per 1-2 day crashes app ◦ [[UIView alloc] init] ◦ [view addSubview…]  Solution ◦ Delegate and perform on main thread performSelectorOnMainThread:@selector( ◦ Use NSAttributedString to work with UIKit Additions ◦ Always check when app crashes in which thread are you
  11.  Long time for response  Multiple resources needed in

    parraler (webbrowsers)  Ready to use in ios:  [SSLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse* response, NSData* data, NSError* error){ … }
  12.  You have multicore devices – use this  Look

    for simplest solution – use library as much as possible  Focus on user interaction – do not freeze your apps  Be carefull with debugging – single thread app is much more testable – much much more  I work for jeppesen boeing company – if i show you sample code I have to kill you ;) – but next time I try to be better
  13.  developer.apple.com  http://www.gotw.ca/publications/concurrenc y-ddj.htm - the free lunch is

    over  http://www.robotswillstealyourjob.com/ - robots are stealing your job – and engineers help them to  http://www.extremetech.com/computing/11 6561-the-death-of-cpu-scaling-from-one- core-to-many-and-why-were-still-stuck/2