Gustl007 Gustl007 - 1 month ago 10
iOS Question

Difference between #import and @class

i recently watched a tutorial where the speaker said that it makes no difference if you use:

#import "Class.h"


or:

@class Class;


And i have to say, my apps work the one way or the other.
But there have to be a difference right? So thought i ask you guys.

Thanks in advance!

Answer

"#import" brings 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 #import both files into the other, the compiler can get confused as it tries to #import Object1.h, looks in it and sees Object2.h; it tries to #import Object2.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 #import the required headers into your implementation (.m) files.

For Example

If you say @class myClass, the compiler knows that it may see something like:

myClass *myObject;

It doesn't have to worry about anything other than myClass is a valid class, and it should reserve room for a pointer to it (really, just a pointer). Thus, in your header, @class suffices 90% of the time.

However, if you ever need to create or access myObject's members, you'll need to let the compiler know what those methods are. At this point (presumably in your implementation file), you'll need to #import "myClass.h", to tell the compiler additional information beyond just "this is a class".