I'm developing an iPhone app, and I'm kinda new to Objective-C and also the class.h and class.m structure.
Now, I have two classes that both need to have a variable of the other one's type. But it just seems impossible.
If in class1.m (or class2.m) I include class1.h, and then class2.h, I can't declare class2 variables in class1.h, if I include class2.h and then class1.h, I can't declare class1 variables in class2.h.
Hope you got my idea, because this is driving me nuts. Is it really impossible to accomplish this?
Thanks.
You can use the @class
keyword to forward-declare a class in the header file. This lets you use the class name to define instance variables without having to #import
the header file.
Class1.h
@class Class2;
@interface Class1
{
Class2 * class2_instance;
}
...
@end
Class2.h
@class Class1;
@interface Class2
{
Class1 * class1_instance;
}
...
@end
Note that you will still have to #import
the appropriate header file in your .m files
A circular dependency is often an indication of a design problem. Probably one or both of the classes have too many responsibilities. A refactoring that can emerge from a circular dependency is moving the interdependent functionality into its own class that the two original classes both consume.
Can you describe the functionality that each class requires from the other?