Это то, что вы ищете?
В вашем заголовке Class2 объявите метод, который возвращает указатель Class1.
- (Class1*)objectOfClass1;
Реализация класса 2,
- (Class1*)objectOfClass1 {return [[Class1 alloc] autorelease];}
В вашем заголовке Class3 объявите метод, который принимает аргумент указателя на Class1:
-(void) doSomething:(Class1 *)obj;
Источник Class3, реализуйте свою логику:
-(void) doSomething:(Class1 *)obj {
// Use your Class1 object here.
}
И вы бы назвали это на Class2 так:
Class1 *obj1; //Object of class one
Class2 *obj2 = [[Class2 alloc] autorelease]; //object of class two
Class3 *obj3 = [[Class3 alloc] autorelease]; //object of class three
obj1 = [obj2 objectOfClass1]; //retrieve object of class one from object of class two
[obj3 doSomething:obj1]; //pass object of class one into object of class three
В любом случае, я рекомендую вам взглянуть на это простое учебное пособие: Цель обучения C: Учебник для начинающих