taylorbarstow.com

Typing Furiously

That would be the caption on a photograph of me when I’m at my best (professionally speaking, that is).  Finally, this happened to me today while using Cocoa!

This is exciting.  It means that instead of stopping to be confused, now I can stop to think things through.  Instead of stumbling over new API’s and design patterns, now I can hold my program in my head.  In short, I can program effectively in my new environment.

Watch out!  As of today, we’re cooking with gas.

Oh, and I redesigned my blog, too.

Earning Some Cocoa Chops

New APIs are hard!  Throughout my life as a programmer, I’ve told people that once you master a few languages, learning new ones becomes much easier.  But learning to go beyond the language and develop something complex on a new platform is a different beast.

My new challenge is Cocoa.  I’m learning Objective-C and the Cocoa (NeXTSTEP) framework to implement a killer solution for graphic designers.

Today, I picked up some chops when it comes to debugging.  One of the trickiest things about C is proper memory management, and this carries over to Objective-C.  The syntax is simplified, but getting the logic right is just as tough.  (Cocoa programmers: obviously I’m talking about traditional retain/release stuff here, not garbage collection).

I spent six hours tracking down a memory management bug.  Some object was being over-released, causing my program to crash.  I had no idea which object it was, though I had a theory, and I wasted time on it.  I didn’t know what to Google for (new platforms are hard), but eventually I landed on it.

The solution? A combination of NSZombieEnabled and MallocStackLogging. NSZombieEnabled proxies release messages.  It will never set a retainCount to zero.  Instead, it logs a message containing the process ID and memory address of the object being over-released.

Conveniently, MallocStackLogging lets you inspect the stack trace up to the malloc call for a given PID and memory address.  Once you find the malloc call, you’ve found your object.

Do I wish I hadn’t spent six hours on this (plus writeup)?  No way—it’s struggles like these that help me master a new environment. The best way to learn a new city? Go out and get lost, then find your way back again. The best way to learn a new platform? Hit a wall and learn how to climb over it.