Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I have references between two classes in Objective-C?

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.

like image 855
treznik Avatar asked Jul 13 '09 13:07

treznik


2 Answers

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

like image 108
e.James Avatar answered Nov 19 '22 12:11

e.James


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?

like image 32
Aidan Ryan Avatar answered Nov 19 '22 12:11

Aidan Ryan