Author: David Chisnall
Publisher: Addison-Wesley, 2011
Aimed at: Objective-C programmers
Pros: Wide and deep coverage will appeal to language enthusiasts and to users of GNUStep
Cons: Confusing for Mac/iOS developers
Reviewed by: Mike James
This is a small book - and small books focused on a manageable topic are good. This one promises to act like a phrase book for Objective-C. Is this a good idea?
If you know Objective-C as the language of MacOS, or perhaps even more narrowly the iPhone, then you might not be expecting the wider view that this book takes. It starts off with a fairly long look at the history, origin and some of the philosophy of the language. If you are a language enthusiast then this is well worth reading. If you are just interested in getting on with using Objective-C then perhaps it is less useful.
Next we get on to an Objective-C Primer which is supposed to be about the raw basics of the language - only getting to the language seems to be difficult. The author has a habit of putting off accurate definitions and keeps presenting short example statements which you are supposed to use to infer the syntax. There are also small code quotes used to illustrate the idea and these have line numbers but they don't start from one. It is only later when you notice the file name underneath do you realize that these are "illustrations" taken from larger system files. If you know the Objective-C language then you find a lot of the discussion relevant and interesting. If you don't know the language then it isn't really going to help.
The most important thing to note is that while the Mac use of Objective-C is the biggest and most important there is also GNUStep and open source version. This book not only covers GNUStep but explains the differences between it and the Mac (Cocoa) implementation. What this means is that if your primary concern is programming in the Mac environment there is a lot of fairly useless information to confuse you.
Moving on from the core language, the book then moves though a range of applied topics - memory management, patterns, numbers, strings, collections, dates and times, property lists, the environment, key-value coding, error handling, files, threads, blocks, notifications, networking, debugging and finally the runtime. Each topic is covered in a fairly long chapter consisting of short "recipe" type entries. Typically the recipe starts with the code and then there is an explanation of what is going on. Often the explanation launches without much scene setting, as if the code was a sort of introduction or preparation for the ideas to come. This is great if you are an expert Objective-C programmer but if you are lagging behind a bit it does nothing to let you catch up.
Overall this is an erudite book and if you know the meaning of erudite then you will enjoy it. It really isn't a phrase book that you can pick up and start using to communicate with the locals without prior and fairly comprehensive understanding. It is more like an informal guide to the grammar, as it expects you to both know a lot about the language and about programming in general.
If you are just looking for something to get you started on Mac or iOS programming then look elsewhere. The book probably doesn't even suit a Mac-oriented intermediate Objective-C programmer because of its coverage of GNUStep. Certainly if you are a beginner or struggling with any of the concepts in Objective-C then keep well away from this book.