Why we should use thread and how to do it with no additional efforts.
Dominik Haska – 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
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
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 –
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] – 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
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 – 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
developer.apple.com
http://www.gotw.ca/publications/concurrency-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/116561-the-death-of-cpu-scaling-from-one-core-to-many-and-why-were-still-stuck/2