In Objective-C, my understanding is that the directive @\"foo\" defines a constant NSString. If I use @\"foo\" in multiple places, the same immutable NSString object is referenc
So, I'm coming into this a little late, but this has been asked numerous times in various ways in both the C / C++ areas of SO, but basically here's an expanded version of my comment to alex gray:
Anytime you think you should use a #define for string macros, you mostly likely shouldn't. The reason is because #define macros are basically regex replacements to the preprocessor. Anytime the preprocessor sees a macro called, it replaces it with whatever you defined. This means a new string literal every single time will get allocated into memory, which is really bad in places like cell reuse identifiers (thus why Apple's UITableViewController default code uses a static).
Using extern / static const instead points all references to a single place in memory, as Eonil mentioned. This is much more memory efficient and performant, which is very important on mobile devices.