iOS developer roundup: Learning Grand Central Dispatch, avoiding the Staircase of Doom, looking at AVSpeechSynthesizer and NSURL / NSURLComponents

by Joey deVilla on April 11, 2014

vaya con ios
I’ve been meaning to get back to regularly featuring articles on programming, and there’s no better time than the present! Global Nerdy will feature a regular category of articles called “Vaya con iOS” (a play on the Spanish blessing, vaya con Dios), which will be about various aspects of iOS development. There’ll also be an Android development category, which you should start seeing in a couple of days.

Let’s get started, shall we?

grand central dispatchGetting the hang of GCD

Once upon a time, if you wanted concurrency in your apps, you’d have to use threads. With modern Cocoa systems, which include iOS 4 and later, you have another option: Grand Central Dispatch, or GCD for short. GCD lets you define tasks — functions or blocks — that can be queued for parallel execution on available processor cores, while keeping your code relatively simple and free of all the “yak-shaving” that comes with managing and scheduling threads.

If you’ve been meaning to learn how to program with GCD, Ray Wenderlich’s site has a couple of tutorials that you should find helpful:

Avoiding the “staircase of doom”

staircase of doom

There are a number of times in Objective-C programming where you end up having one completion block containing another, which contains another, and so on, and in the end, you have to close them all with what Richard Turton calls on his blog, Command Shift, the “staircase of doom”:

“Any time you see this in your code,” writes Turton, “you’re doing it wrong.”

He’s got a couple of articles on avoiding the staircase of doom in certain situations:

  • Using dispatch groups to wait for multiple web services: If your app needs to make a number of web services calls, all independent and started by a single method, Turton suggests using a dispatch group to do the job. “A dispatch group monitors work that has been added to it,” he writes, “and it will know when that work is done.”
  • Stop nesting animation blocks: “Chaining animations together has always been a little bit awkward. You’d do the first step, then in the completion block, do the second step, then in that completion block, do the third step, and so on, until you close it all off with a staircase of doom.” Or you could use the animateKeyFramesWithDuration:options:animations:completion: method, and he shows you how to do it.

Talking to the user and other machines

talk iconTwo of the more recent articles on NSHipster cover communication-related classes:

  • AvSpeechSynthesizer: “Introduced in iOS 7, AVSpeechSynthesizer produces synthesized speech from a givenAVSpeechUtterance. Each utterance can adjust its rate of speech and pitch, and be configured to use any one of the available AVSpeechSynthesisVoices.”
  • NSURL / NSURLComponents: “Here [in a URI], in a single, human-parsable string, is every conceivable piece of information necessary to encode the location of any piece of information that has, does, and will ever exist on a computer…A solid grasp of network programming is rooted in an unshakeable familiarity with URL components. As a software developer, this means having a command over the URI functionality in your programming language’s standard library. If a programming language does not have a URI module in its standard library, run, don’t walk, to a real language that does.

{ 1 comment… read it below or add one }

1 John Murphy April 22, 2014 at 8:10 am

Sharing is good. Sharing the right information at the most appropriate moment is simply awesome. I work on various iOS development projects. I know how essential is this post for me and other iPhone app developers.

Leave a Comment

Previous post:

Next post: