ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
Why we should use thread and how to do it
with no additional efforts.
? Dominik Haska ¨C Research Software
Developer in Jeppesen a Boeing Company
? 9 years of professional programming
including 1 year in IOS
? Why
? Moore law and physics limitations
? How
? how to use the potentially power of multicore
devices easily and properly
2013-05-15 threads. why and how
2013-05-15 threads. why and how
2013-05-15 threads. why and how
? iPhone 1 ¨C 1 CPU 412 MHz
? iPhone 5 ¨C 2 CPU 1300 MHz
? iPad 1 ¨C 1 CPU 1000 MHz
? iPad 4 (retina) ¨C 2 CPU 1400 MHz
? 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;
}];
[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];
? Animation block stops user interaction during
animation
? animateWithDuration:delay: options:
animations:completion:
? UIViewAnimationOptions:
? UIViewAnimationOptionAllowUserInteraction
? UIViewAnimationOptionBeginFromCurrentState
? [self.layer removeAllAnimations];
? 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 ¨C
targetFrame.origin.x;
CGFloat yMis = animatedFrame.origin.y -
targetFrame.origin.y;
[fix the position];
}
? 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)
? Some code have to be executed in main
thread
? [NSString sizeWithFont] ¨C sometimes ¨C 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
? dispatch_async(dispatch_get_global_qu
eue(DISPATCH_QUEUE_PRIORITY_DEFAULT),
^{
your code here
}
? 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){ ¡­ }
? You have multicore devices ¨C use this
? Look for simplest solution ¨C use library as
much as possible
? Focus on user interaction ¨C do not freeze your
apps
? Be carefull with debugging ¨C single thread
app is much more testable ¨C much much
more
? I work for jeppesen boeing company ¨C if i
show you sample code I have to kill you ;) ¨C
but next time I try to be better
? 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 ¨C 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

More Related Content

2013-05-15 threads. why and how

  • 1. Why we should use thread and how to do it with no additional efforts.
  • 2. ? Dominik Haska ¨C 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
  • 7. ? iPhone 1 ¨C 1 CPU 412 MHz ? iPhone 5 ¨C 2 CPU 1300 MHz ? iPad 1 ¨C 1 CPU 1000 MHz ? iPad 4 (retina) ¨C 2 CPU 1400 MHz
  • 8. ? 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; }];
  • 9. [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];
  • 10. ? Animation block stops user interaction during animation ? animateWithDuration:delay: options: animations:completion: ? UIViewAnimationOptions: ? UIViewAnimationOptionAllowUserInteraction ? UIViewAnimationOptionBeginFromCurrentState ? [self.layer removeAllAnimations];
  • 11. ? 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 ¨C targetFrame.origin.x; CGFloat yMis = animatedFrame.origin.y - targetFrame.origin.y; [fix the position]; }
  • 12. ? 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)
  • 13. ? Some code have to be executed in main thread ? [NSString sizeWithFont] ¨C sometimes ¨C 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
  • 15. ? 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){ ¡­ }
  • 16. ? You have multicore devices ¨C use this ? Look for simplest solution ¨C use library as much as possible ? Focus on user interaction ¨C do not freeze your apps ? Be carefull with debugging ¨C single thread app is much more testable ¨C much much more ? I work for jeppesen boeing company ¨C if i show you sample code I have to kill you ;) ¨C but next time I try to be better
  • 17. ? 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 ¨C 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