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?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With