I’ve been teaching myself Objective-C over the past month or so (I’m a Java head) and I’ve got my brain wrapped around most of it now. One thing that’s confusing me at the moment: What’s the difference between importing a class via @class vs doing a #import?
Is one better than another one, or do I need to use one instead of the other in certain cases? I’ve been using just #import so far.
#importbrings the entire header file in question into the current file; any files that THAT file#imports are also included. @class, on the other hand (when used on a line by itself with some class names), just tells the compiler ‘Hey, you’re going to see a new token soon; it’s a class, so treat it that way).This is very useful when you’ve got the potential for ‘circular includes’; ie, Object1.h makes reference to Object2, and Object2.h makes reference to Object1. If you
#importboth files into the other, the compiler can get confused as it tries to#importObject1.h, looks in it and sees Object2.h; it tries to#importObject2.h, and sees Object1.h, etc.If, on the other hand, each of those files has
@class Object1;or@class Object2;, then there’s no circular reference. Just be sure to actually#importthe required headers into your implementation (.m) files.