Cocoa Programming for Mac OS X, 2nd Edition 162
Cocoa Programming for Mac OS X, 2nd Edition | |
author | Aaron Hillegass |
pages | 450 |
publisher | Addison Wesley |
rating | 9 |
reviewer | Kevin H. Spencer |
ISBN | 0321213149 |
summary | Aaron Hillegass new book, Cocoa Programming for Mac OS X, 2nd Edition, is a very helpful book for developers interested in getting not only their feet wet, but become totally immersed in creating applications using the OpenStep-derived API known now as Cocoa. Don't dive in without knowing how to swim in C++/Java, however. |
The author is no stranger to OpenStep, having worked at NeXT as well as Apple in OpenStep application development and training. Currently, Hillegass teaches Cocoa programming for The Big Nerd Ranch.
Cocoa Programming for Mac OS X, 2nd Edition is written in a way that makes you feel like you are in a class. There are prerequisites you must know and understand before you can begin, and, as a good professor would, the author points out what you need to have and know before beginning. Happily, the author is quite meticulous and has generously provided useful resource links and help where readers may explore for their supplies and primers and the like.
Essentially, anyone with a copy of Mac OS X 10.3 Panther has all that should be required--the Developer Tools CD contains all developer software and documentation necessary (the author notes in the book specific locations for key primers and references).
If you are experienced in C++ or Java programming, Cocoa development will seem familiar enough. Objective-C is used throughout the book (the author notes that development in Java is possible, but not recommended) for the various and numerous exercises. Cocoa development is made easier with Apple's Xcode application, however, Cocoa is not for the timid or novice programmer. This book is well-written and easy to follow IF you have a respectable level of C/C++ or Java development under your belt.
The text, as well as its diction, is easy on the eyes and mind, and while this is a programming book, the author's voice speaks well, allowing you to feel as if you can ask the book questions as if you were in a classroom. Graphics and text are plentiful, but information is not packed on every page, so following along is far from drudgery. Each chapter does stack itself on information from the previous, so this isn't a reference book in the strictest sense.
Addison-Wesley, the publisher, has formatted the book nicely, with a pleasant font that won't tire the eyes, consistent code and text conventions, and a detailed Table of Contents and Index, However, it's thickness and binding doesn't lend itself to lying flat, so you'll have to weight the book pages down to read the book hands-free as you type in examples. Speciality bindings that could have been useful for this book are not cheap, based on my publishing experience, and such a binding would add more to the book's $45 US cost. (Amazon has a great deal on the book at the time of this review.)
Five new chapters were added in this 2nd edition, which discuss creating AppleScriptable applications, integrating OpenGL, adding Undo abilities, creating reusable frameworks, and tinkering with GNUStep, the raw open-source tools for those curious about making Cocoa apps under Linux.
If you're a UNIX or Windows developer who picked up a Mac OS X machine recently in hopes of developing new apps or porting your apps to Mac users. this book should be strongly considered as one of your essential reference and training tomes.
You can purchase Cocoa Programming for Mac OS X, 2nd Edition from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, carefully read the book review guidelines, then visit the submission page.
Mmmm... Cocoa (Score:2, Funny)
In case anyone is wondering.. (Score:5, Informative)
Re:In case anyone is wondering.. (Score:2)
Re:In case anyone is wondering.. (Score:2)
That's a good point. A C++ app would use Carbon instead of Cocoa.
Re:In case anyone is wondering.. (Score:4, Insightful)
Re:In case anyone is wondering.. (Score:3, Informative)
Re:In case anyone is wondering.. (Score:2, Informative)
What's so weird about this? Personally, I find Objective-C to be a problematic, weird language, with an unappealing syntax. I know Apple considers the dynamic binding to be a "feature", but I'm all about static type checking... hell, I'd add more rigid type checking to C++ if I could :-)
I vastly prefer to work in C++. No way do I want to use Objective-C
Re:In case anyone is wondering.. (Score:2)
Re:In case anyone is wondering.. (Score:2)
Err... quite a few bugs. Can't say I've seen it erase any folders, though. Should I ask why you have a link to some game site, or should I just tell moderators to mark you as -1 Troll?
Re:In case anyone is wondering.. (Score:2)
Differences from first edition (Score:3, Interesting)
Re:Differences from first edition (Score:5, Informative)
Re:Differences from first edition (Score:4, Funny)
Re:Differences from first edition (Score:5, Funny)
Brushed Metal pages?
-m
NSController (Score:5, Informative)
Re:Differences from first edition (Score:5, Informative)
The chapter on GNUStep is also new. This is of interest to me, as I do a lot of work on Linux, but have been wanting to do some OS X coding as well. I've heard that GNUStep still has a "bit" of catching up to OS X's implementation of OpenStep. But with applications like GNUMail, maybe this isn't all hopeless, and might actually be useful.
Re:Differences from first edition (Score:4, Interesting)
It's still in development, and there isn't a graphical builder for it yet, but it's very promising.
Re:Differences from first edition (Score:3, Informative)
He has incorporated 2 years worth of experiences from the teaching of the first edition at Big Nerd Ranch [bignerdranch.com] into this book... so it is little wonder that the second edition is better. He approached the book with the idea that "it'll be released when it is ready", and it shows. He didn't rush this out the door. You cannot find a better resource for Mac OS X programming than this author [bignerdranch.com]. I suggest reading anythi
Other good books are... (Score:5, Informative)
Simon
Re:Other good books are... (Score:2)
Learning Cocoa with Objective-C does an excellent job at easing you into programming on OS X. I bought it around a year ago, and it really helped me get up to speed on how OS X applications are written, how to use Interface Builder, etc. There's a lot of good detail on Objective-C, of course, but I'd say that's only about 50% of the content. The rest helps you understand how to hook code up to the UI, work with bundle files, and so forth.
It's a great book to start with, and anyone who's programmed before
C++ is for the weak (Score:3, Funny)
BASIC is weak (Score:2, Funny)
Re:BASIC is weak (Score:2, Informative)
Assembly is weak (Score:5, Funny)
Which is why true && false == true. What, you wanna start? BRING IT ON!
Re:BASIC is weak (Score:3, Funny)
Really real men ... (Score:2)
While the building is on fire.
What is the world coming to? (Score:2)
What ever happened to creating binaries from scratch in a hex editor??
Re:C++ is for the weak (Score:3, Funny)
Well, you fail then... the correct answer was:
10 "Real men code everything in BASIC."
20 goto 10
-m
Re:C++ is for the weak (Score:2, Funny)
I meant:
10 print "Real men code everything in BASIC."
20 goto 10
-m
Re:C++ is for the weak (Score:2)
JumpHere:
Print "Real Men Code everything in BASIC."
goto JumpHere
Re:C++ is for the weak (Score:2)
Oldie but goodie (Score:3, Funny)
Real Programmers don't comment their code. If it was hard to write, it should be hard to understand.
Real Programmers don't write application programs, they program right down on the bare metal. Application programming is for feebs who can't do system programming.
Real Programmers don't eat quiche. They eat Twinkies. And Szechwan food. (Do not go to eat Szechwan food with a group
Another OBG - Klingon SW Quality Assurance (Score:2, Funny)
* Perhaps today is a good day to die... I say we ship it."
* Specifications are for the weak and timid!!
* This machine is a piece of GAGH! I need dual Pentium (!) processors if I am to do battle with this code.
* You cannot really appreciate Dilbert unless you've read it in the original Klingon.
* Indentation?! I will show you how to indent when I indent your skull!
* What is this talk of 'release'? Klingons do not make software 'releases'. Our software escapes, leaving a bloody trail of designers and qual
Re: (Score:3, Funny)
Re:Another OBG - Klingon SW Quality Assurance (Score:2)
Your signature has a [ObjC retain] without having a matching [ObjC release].
Therefore, you are technically Klingon.
Re: (Score:3, Funny)
Re:C++ is for the weak (Score:2)
I'll wait (Score:5, Funny)
THAT is an old story... (Score:5, Interesting)
After all, this is the same basic design flaw that led me to ban IE and Outlook at work about
HEY, PEOPLE, DON'T USE THE SAME PROGRAMS AND HELPER APPLICATIONS FOR LOCAL DATA AND THE INHERENTLY UNTRUSTABLE INTERNET!
Sheesh. This isn't rocket science. Hopefully Apple has some rocket scientists and won't spend the next decade patching one hole after another.
Re:THAT is an old story... (Score:5, Interesting)
See, if you have to do something twice, you only write it once. Because if you had to write it twice, each version would be twice as buggy. Which in your case would mean twice as many exploits. It really isn't rocket science to see which is a better idea from a process management perspective. If you want stable code, you can't go writing a separate version of something just for use on the internet.
What you should do, however, is never make the assumption that what the program is being told to do is what the USER wants the program to do. This works for local exploits as well...like when your brother starts trying to screw around with the network settings. If your program is being asked to do something twitchy...like delete something, change a system setting, open a port, etc...then your program should require user input before doing so. It should never automatically execute anything that might be unsafe.
Which is where Apple's one step better than Windows. It asks you for your system password before mucking with the system. It asks for your system password before deleting system wide programs. It unpacks archives automatically, but doesn't run the files inside. And it can be made to ask for your user password before messing with your user settings.
Re:THAT is an old story... (Score:2, Interesting)
And, well, there's this thing called a "subroutine library" that solved this straw man you've built up. You're a smart guy, I'm sure you've heard of them: you write it once, use it from two places.
As for "never
Re:THAT is an old story... (Score:2)
And this is exactly what Windows does, more or less. UN-fortunately, certain programs were told to, by default, automatically handle files using functions from these libraries -- including libraries which handle executable scripts that basically have free reign over the system. This is the problem -- not that the same libraries were used for both user functions and "teh intarnet," but that the designe
Re:THAT is an old story... (Score:5, Informative)
So applications like web browsers, mail software, media players, anything that implements a mechanism to access and display untrusted data, have completely different requirements from applications like Finder or Help Viewer. It is very difficult to design a single set of rules that can aply to both, even if you use "Zones" to separate them, because it's difficult to determine *what* zone something is supposed to be in.
That's how the "cross zone" exploits on Windows work, the typical example is to trick an application like Outlook into opening a document on the local disk that has been provided by the exploit script. It's local, so it's trusted, and bob's your uncle... the bad guy is in.
This is exactly the same problem these recent exploits on the Mac use.
The right fix is to have the application keep track of the history of an object and never let it at the "trusting applications" list. And to have applications that deal with untrusted data by default assume that everything they're dealing with is untrusted. In Microsoft's case, instead of having a single "internet explorer" application (actually the MS HTML Control) that you call with a file and have it figure out whether to trust it or not, you would have an IE application that handles access, and calls an HTML entity that only does display and goes back to the application for access. Apple has a different display model using PDF that doesn't do access, so they don't have that problem... all they need to do is split LaunchServices into a "for trusted data sources" and "for untrusted data sources" list. Applications that open remote documents use the "for untrusted data sources" list for references in those documents, and you ONLY put applications that expect untrusted data in that list.
There's little duplication, because there's very little duplication between what you want to do with trusted and untrusted data... and you would generally be able to make do with a wrapper.
As for the famous Apple "graphical SU", well, that's a good start. It's part of a security solution and I'm glad it's there... but it's nowhere near a panacaea for this situation. If I have local access on your machine I don't need to do *anything* to your system configuration to make your life just as miserable as if I were running as Administrator on a Windows box or root on Linux. I could send spam in your name, open up a back door that a bad guy could use to perform more sophisticated attacks, set a listener on your email, redirect your browser through my proxy, just about anything that doesn't require actual superuser access. And all it takes is *one* rogue executable to get it in.
This is not an attack on Apple... there is no way to build an OS that's suitable for a general user population to run arbitrary code on without opening up the possibility that someone might trick the user or the system into running an exploit. You wouldn't want to use a system that sandboxed everything, and neither would I. So don't be in such a hurry to defend Apple's honor... there's no dishonor here for them. It's Microsoft... who created the copreesponding hole in the mid '90s and refused to fix it even when required to under a court order that has egg on their face.
Re:THAT is an old story... (Score:2, Insightful)
I am having a hard time following your logic. If this isn't rocket science, why do you hope Apple has some rocket scientists? Wouldn't it be better to have someone who is not a rocket scientist to deal with problems that are not rocket science?
Re:THAT is an old story... (Score:2)
Re:THAT is an old story... (Score:2, Insightful)
Well, if it isn't rocket science then what good would that do?
Good Read! (Score:5, Informative)
The additions of covering bindings is just how to get around the new Xcode interface including the revamped Interface Builder makes this book a must read. Starting with any of the other books you'll be banging your head against the wall as what you see and what they describe in terms of many of the actions will not match the current tools.
Second Edition Errata (Score:5, Informative)
I'm . . . (Score:5, Funny)
Re:I'm . . . (Score:2)
Good Tutorial (Score:5, Informative)
I'm glad to see that the second edition added AppleScripting and material on implementing Undo, even if at the expense of the Java chapter. (No surprise, there: in the beginning of the first edition's Java chapter, Hillegass basically says this about programming Cocoa using Java: "DON'T.")
Re:Same for GnuStep it seems... (Score:4, Interesting)
GNUstep has very fine InterfaceBuilder and ProjectBuilder clones, a quickly growing number of excellent end-user applications.
Also, it seems to me that the install is *not* difficult. Granted, I've been working with it for a long time, so maybe I'm just used to it. And I'm sure Hillegass wasn't used to dealing with Linux (or BSD, or Solaris, or whatever he tried to install it on).
But considering the very small number of people working on the GNUstep core, I'm amazed at the quality and completeness of the project.
I'll be programming at.... (Score:5, Funny)
can cocoa... (Score:2)
No xcode? (Score:5, Interesting)
Where are the Xcode books???
I'd love to see a "more up to date" version of this that deals strictly with using Xcode. That seems to be the tool of choice for the OSX Cocoa developer's future.(imho)
Re:No xcode? (Score:5, Informative)
Re:No xcode? (Score:2)
Seeing as this is a 2nd edition I would have thought that they'd had time to address this by know, as Xcode was released along with Panther (10.3) and there's plenty of Panther books around nowdays.
Re:No xcode? (Score:3, Informative)
Re:No xcode? (Score:3, Interesting)
MVC Shite!... (Score:2, Interesting)
After spending a good few hours understanding how to develop in this environment,I honestly think that the effort and pain needed to put together this simple currency converter app, is not worth it.... I could have done the same thing in any other environment (Swing/VB/ old Res-e
Re:MVC Shite!... (Score:2)
Re:MVC Shite!... (Score:2)
Re:MVC Shite!... (Score:5, Informative)
When your application runs the nib is loaded as needed and that object graph is unarchived.
You can implement rather complex GUIs without writing a single line of code yourself (more so now thanks to the contoller objects supported) and without any other tool generating code for you.
If you haven't really used Interface Builder and AppKit you should consider taking it for a serious spin... often their is no need to code your GUI by hand.
Also note that you can load a nib (with one or more views, etc.) and have its views inserted into the view hierarchy as needed and multiple times.
Controller objects/cocoa bindings (Score:2)
Recently wrote an article on this, for those that are interested:
Introduction to Bindings [cocoadevcentral.com]
- Scott
Re:MVC Shite!... (Score:2)
My favorite trick is the do-it-yourself web browser, done entirely in IB.
Start IB, make a new empty nib, and drag a window into it. Drop a WebView in that window, size to your liking, and leave a bit of space at the top. Next, drag a text box into the window, then control-drag from the text box to the WebView, set i
Re:MVC Shite!... (Score:2)
Re:MVC Shite!... (Score:2, Insightful)
What about creating reuseable, database linked components, that can be dropped into any screen in a line of code?
i also think that ides do make a difference (i'm trying to say that ides influence your way of coding and also your productivity. not to forget the fun). using eclipse for example is like using xwindows and, say, gnome. it takes some time until everything is configured well, but when it is, you do drop your db linked componen
Re:MVC Shite!... (Score:5, Interesting)
Tell me, Can I make a dynamic screen, that adjusts itself based on the data inside it (AKA Java Swing)....
Yuck. Gag. Barf. Retch.
First off, MVC is really not very controversial. Most developers accept that MVC design is a Best Practice for applications with a significant user interface.
Secondly, if you honestly prefer writing a ton of code to create a Swing GUI to drawing exactly what you want in IB and being done with it, you are a masochist. With bindings, it's even easier now to hook up the GUI to your model. And if you use a tool that generates the GUI code for you, you're justing putting the pain off a little bit. Sooner rather than later, you will need to dive into all that autogenerated code, and what you see won't be pretty.
Thirdly, yes, I'm sure you can do the Currency Converter app faster in VB. BUT THAT'S BECAUSE YOU'RE MORE EXPERIENCED IN VB! Maybe you can save a small amount of time writing Currency Converter in VB if you eschew MVC design, but that's just because Currency Converter is not a serious application. Write anything more complex, and a good MVC design will give you a huge advantage in development time and code quality. It's a matter of being penny wise and pound foolish.
What about creating reuseable, database linked components, that can be dropped into any screen in a line of code?
Apple owned the definitive technology in this space. It was called Enterprise Objects (it kind of still exists but only Java and only works with WebObjects). Apple apparently decided it gave them too much of a competitive advantage for enterprise development and were afraid it might lead to success in that market segment, so they dropped Cocoa support for it.
Peace be with you,
-jimbo
Re:MVC Shite!... (Score:4, Interesting)
In regards to the dynamic sizing issue (if I understand the complaint correctly), you can have dynamically changing sizes. Open up an inspector for a control and select "Size" from the pop-up menu at the top. You should see a box within a box. Clicking on different areas of the box draws little springs--those springs represent in what ways the control is allowed to grow/shrink.
The biggest advantage of the MVC for a GUI, IMHO, is portability. While the UI/View for my Cocoa app will be mac-specific, the logic/model for the app is completely cross-platform. I could probably also make the controller code cross-platform by wrapping it for the system I'm porting to, especially if that system supports the MVC paradigm.
Re:MVC Shite!... (Score:3, Insightful)
"This design for Currency Converter is intended to illustrate a few points, and so may be overly designed for something so simple. It is quite possible to have the application's controller class, ConverterController, perform the computation and do without the Converter class. By adhering to the MVC paradigm in this tutorial, how
Re:MVC Rocks! (Score:2)
As could I with xcode/IB.
Tell me, Can I make a dynamic screen, that adjusts itself based on the data inside it (AKA Java Swing)....
Sure.
What ab
Re:MVC Shite!... (Score:2, Interesting)
As for the dynamic screen that adjusts itself to the data inside it, of course you can do this. This has always been fairly easy to accomplish, but 10.3 adds a concept ca
Re:MVC Shite? (Score:2)
The Currency Coverter is really designed to show this pattern at it's most simple. Sure there are all sorts of short cuts you can take if you are really writing a simple currency converter, but the point of the exercis
Aaron Hillegass - a personal opinion (Score:5, Informative)
He struck me then as someone that falls into the category as a "Big Brain", esp wrt to training/educating on software programming. And a super nice (and patient) guy, to boot.
I'm gonna pick up this book asap.
---anactofgod---
Re:Aaron Hillegass - a personal opinion (Score:2, Insightful)
I went to graduate school briefly with Aaron. (He left soon after he started to pursue his NeXt / Apple / Cocoa interests.) He was indeed a super nice guy; he helped me through first year differential geometry (and now I think of myself as a differential geometer).
Go Aaron!
Alas, I'm not
for those of you that like openstep & linux (Score:3, Informative)
GNUStep project [gnustep.org]
useful for getting your feet wet with Objective-C (pretty good) and the *step frameworks.
Where's the project builder? (Score:2)
Re:Where's the project builder? (Score:2)
Project Center [gnustep.org]
- Scott
Re:Where's the project builder? (Score:2)
Good book, but (Score:4, Informative)
However...
Complete knowledge of the AppKit and the Foundation is essential to writing good Cocoa programs (To a lesser extent CoreFoundation (horribly documented!) and Carbon). There are plenty of objects I found post-facto that would have made my life easier had I known they existed. I have yet to find a single book that does this well.
Currently, the best way to start developing (and gain the kit knowledge) in Cocoa is to read these two books and then just try and develop a program, all the while stopping and searching AppKiDo for useful objects that you think may exist.
yum (Score:3, Funny)
Cream or sugar?
Reference (Score:4, Interesting)
Comment removed (Score:4, Informative)
Porting your apps to Mac users (Score:2)
Interesting idea. I thought most Mac users had to be programmed in English, though.
Please explain (Score:2)
Are you saying that familiarity with C++ or Java is sufficient to learn Objective-C with no further effort? Or perhaps you're saying that the book teaches me how Objective-C along with Cocoa?
Without some sort of clarification, the two sentences above seem rather contradictory.
Re:Please explain (Score:2)
Re:Please explain (Score:2)
Soungs good, but not on Safari... (Score:2)
Re:Soungs good, but not on Safari... (Score:2)
Perhaps O'Reilly paid through the nose to be the exclusive "Apple Developer Connection Approved Documentation" label (or whatever the exact phrase is) and simply doesn't want to share.
Perhaps there is some bad blood betwixt Mr. Hillegass and his former employer (Apple/NeXT).
There are many possibilities, but my suspicion is that you won't see this great Addison-Wesley book show up on t
Moderated funny? (Score:2, Insightful)
Better "dive in" well before... (Score:3, Insightful)
Well, OK, not screwed up, but C++ experience should not be considered a good background for learning Objective-C Cocoa. Its approach to programming with "objects" is very different, and the transition to Objective-C, IMHO, leads to a mix of techniques that is hell to read/debug, making for buggy Cocoa apps. If you're a C++ vet, it may be a good idea to unlearn a lot of what you know, and assimilate the conventions of the seasoned Objective-C coders.
That said, even though C++ may not give you a good start for Objective-C development, it can still be very beneficial to leverage C++'s speed in various parts of your application. You can, for example, build your engine from C++, and your widgetry in Objective-C Cocoa.
A strong Java background makes for a fairly easy to transition into Cocoa, trading in a few conveniences for greater flexibility, more mature classes, and easy GUI development. Java is quite similar to Objective-C and both can be used/mixed to build Cocoa applications (most don't though).
If you're a C jockey, Objective-C is like adding a new weapon to your arsenal. Objective-C is a superset of C. Those who are fluent in the design patterns of both languages will get the most from their Cocoa applications. Indeed, the ability to (fairly) freely intermix C, Objective-C and C++ is a great advantage, allowing you to use the tool that's right for the job.
As a switcher from any language, one of the biggest hurdles can be getting some fundamental OO design patterns down, which are expected by most of the Cocoa API. For example, you can't go one step in learning Objective-C without being taught the MVC (Model-View-Controller) paradigm. In contrast, a great many mature Java/C++ developers have never learned, or even heard of, this concept.
Just some observations... YMMV.
Re:Better "dive in" well before... (Score:3, Insightful)
A few addenda (Score:5, Informative)
Tools:
You must have Panther (10.3) or later to use this book. It was possible to read the first edition (written for 10.1) and make some mental leaps forward, but the reverse is impossible. Besides the differentces between XCode and the GUI screenshots, Apple deprecated a number of methods (like takeValue:forKey:) in favor of much cleaner names (e.g. setValue:forKey:). Aaron doesn't mention the deprecated names (quite rightly IMHO) so that will make the Jaguar programmer have to refer to Apple's website to do the translation back to the older APIs. You may need to do mental exercises like that when you have to read someone elses code or when you're back porting your app, but if you're still learning, be sure to get Panther before trying to use this book.
Presentation:
Many of the books screenshots look much cleaner than the prior version. I think that's mainly attributable to Apple deciding to tone down much of the visual clutter in the Aqua theme. The lack of the pinstripes in windows and menus really makes the documentation much easier on the eyes. The change is really much more dramatic and makes for a much more readable book.
If You Read the First Edition:
I've read the first edition, and I have to say that I got impatient with much of the earlier portions of the book. I wanted the examples for Bindings and other new additions to Cocoa. I was already comfortable with the trivial examples in the early chapters, so it was hard to force myself to go back and really read and work through them. Do it. I remember most of the big points made, but some of the subtler points make more sense now. Whether these were in the last edition, I'm not certain but it was still good a good review.
Applicability to a New Programmer:
I'll underscore that this isn't for a new programmer. If you are new to C, I'd suggest reading the non-GUI text "Programming in Objective-C" by Stephen G. Kochan. An extensive background in object-oriented programming isn't as necessary (and in fact may be detrimental if your background is multiple inhereitance of the C++ world). But it does include some tips and advice on good OO techniques that Objective-C programmers use. You won't see any explanation on pointer tricks, handles, NULL, or many of the other plain C conventions. If you are a strong Unix programmer, you may feel more comfortable reading the Aaron Hillegass and Mark Dalrymple's "Core Mac OS X and Unix Programming" first. That book is billed as the sequel to this one (and it does use a little bit of Objective-C code), but it probably addresses your interests far more than this Application-centric book does.
The lessons of this book are quite worthwhile to certain audiences, but finding whether you are a target for it's wisdom may be tricky. Don't get frustrated. If you find it to be over your head, read another intro book but I'd definitely come back to this one at some point in the future.
Don't really need to know C++ nor Java... (Score:3, Insightful)
What this book does is introduce you to the Cocoa API and the Apple Dev Tools XCode & Interface Builder. The first edition was a blast and I plan on picking up the second edition in the near future.
If you are coming from a C++ background and you like it, you should study Carbon and not Cocoa at first. You can call Cocoa objects from Carbon and visa versa though. New projects should probably be written in Cocoa. Older projects written in C++ can be ported to Carbon easily. C programs can be ported to Cocoa and Java programs should probably stay Java or be ported to the WebObjects frameworks if it's a web based solution. You can write Java apps using the Cocoa API but it then becomes locked into the OS X platform as the Cocoa API (for Java) is not available on other platforms (maybe GNUStep but it's not all the way there yet) Note, you can run Tomcat and JBoss on OS X!
The NeXTStep / OpenStep / Cocoa API is rather advanced and can take some getting used to... i.e. you will have a rather steep learning curve to absorb it all and understand the best practices. This book is a great introduction and will get one up to speed quickly.
I found Interface Builder to be the most difficult part of the development process. This was because I had to unlearn all the preconceived crap in my head that I learned from other GUI interface tools. It turns out IB is much more advanced then anything I've ever used before because it builds live objects and not just GUI code. It then archives these objects into NIB files which are automatically unarchived by a Cocoa application. You literally build objects graphically and then interconnect them to each other and your Obj-C classes and instances. WebObjects does the same thing but with Java. It's a really slick development tool and once you start to understand it, the light turns on and you can see the possibilities.
Total newbies should probably pick up the "Programming in Objective-C" by Stephen Kochan. This book covers just the underlying Obj-C language and the Core Foundation (NeXStep/OpenStep/GNUStep/Cocoa) API. Programming in Objective-C does not cover the GUI portion of Cocoa programming. I just finished it and it managed to bootstrap my understanding quite a bit.
Differences from the first edition? (Score:2)
I've seen the list of what's been updated, but it isn't enough to convince me that getting the second edition is worth the price if you already own the first. Are the differences enough to warrant the additional investment?
Cocoa or Carbon? Daddy or Chips? (Score:2)
Right, here's a question that pops into my head whenever I see references to Cocoa/Carbon on slashdot...
See, I've written some libraries that I use to write my apps, and I deliberately chose to make them portable, in case I ever decided to switch from Windows to Linux or Mac OS X - so I wouldn't end up losing all my software (or having to put a lot of work into porting them).
So I have APIs for general OS interface and GUI programming, which I designed to be portable, having passing familiarity with Linu
Re:Cocoa or Carbon? Daddy or Chips? (Score:2, Informative)
My feeling is that while Cocoa is a better choice for developing Mac OS X specific stuff, Carbon may end up being more similar to other platforms, and so possibly a bit easier for this specific use. Cocoa is still very doable for the same problem - but essentially, I suspect many C++ methods would just end up being a call to an equivalent Cocoa method (though often one you've written yourself). Mixing C and C++ is not particularly ugly or hackish in most cases.
Re:Objective C, pshaw (Score:5, Informative)
You may as well as why ID chose NeXT and Objective-C over Windows and C++ to develop the original Quake engine.
But, to save you the effort of typing "Objective C versus C++" in a Google search field, I cut & paste a short paragraph out of an article (returned by said search) printed in the Linux Journal on Sept 13, 2003 [linuxjournal.com].
As for C#...Objective-C pre-date C# by decades. It was developed independently and comtemporaniously with C++.
---anactofgod---
An introduction to Objective-C for programmers familiar with C++ or any other OOP language.
It is a surprising fact that anyone studying GNUstep or the Cocoa Framework will notice they are nearly identical to the NEXTSTEP APIs that were defined ten years ago. A decade is an eternity in the software industry. If the framework (and its programming language--Objective C) came through untouched these past ten years, there must be something special about it. And Objective-C has done more than survive; some famous games including Quake and NuclearStrike were developed using Objective-C.
Why Should I Learn Objective-C?
Objective-C gives you the full power of a true object-oriented language with exactly one syntax addition to C and, unlike C++, about a dozen additional keywords.
Since Apple purchase Next for $400 million and Mac OS X ships with Objective-C, recycling NEXTSTEP (later called OpenStep), as well as the fact that GNUstep is delivering the rock-solid window-manager Window Maker, Objective-C is (rightly) getting more attention because it is more flexible than C++ at the cost of being slower.
In reality, Objective-C is Object C and is as close to Smalltalk as a compiled language can be. This is no surprise as Brad J. Cox added object-oriented, Smalltalk-80-based extensions to the C language.
So objective-C is a hybrid between Smalltalk and C. A string can be represented as a `char *' or as an object, whereas in Smalltalk everything is an object. As with Java (int, double,.. are no objects) this leads to faster performance.
In contrast, C++ traditionally is associated with the Simula 67 school of object-oriented programming. In C++, the static type of an object fixes what messages it can receive. In Objective-C the dynamic type of an object determines what messages it can receive. The Simula 67 format allows problems to be detected at compile time. The Smalltalk approach delays typing until runtime and therefore is more flexible.
A GNU version was written by Dennis Gladding in 1992 and then Richard Stallman took over the development. The current GNU version is derived from the version written by Kresten Thorup when he was a still a university student in 1993. He ported that version to the NeXTcube and joined NeXT.
Apple chose Objective-C for Cocoa, as NEXTSTEP was based on Objective-C. But, even if they had written it from scratch, they might have decided to use Objective-C because it is object-oriented, which is undoubtedly a must for big software projects. It extends the standard ANSI C, so that existing C programs can be adapted to use the frameworks, and programmers can chose when to stick to procedural programming and when to go the object-oriented way. C was intended to be a good language for system programming. C is fine as it allows the programmer to do exactly what she wants, all the way down to the hardware. C also keeps the gold old pointers, which can be used for efficient code.
Objective-C is simple, unambiguous and easy to learn. But most of all, it is the most dynamic language of all object-oriented languages based on C. Its dynamic late binding offers flexibility and power. Messages are not constrained by either the class of the receiver or the method selector, allowing rapid change and offering access to information about running applications.
The following i
Re:Objective C, pshaw (Score:4, Informative)
The most striking difference is the message passing syntax. For instance, if "hello world" is a string, returns "llo w" as a new C++ string, while or, more simply In Objective C, the NSArray colllection class is similar similarly, there's the more concise method: Objective C is also a dynamically typed language, which makes GUIs somewhat easier to write.
Re:Objective C, pshaw (Score:2)