如何在Objective-C中的类之间工作?

时间:2011-01-30 23:22:22

标签: iphone objective-c cocoa-touch class

目前,我的大多数代码都在同一个viewcontroller中,我想将其中一部分移到其他区域。比如将动画全部移动到其他地方。但那我如何引用另一个类中的东西呢?我如何从该类引用回到我的viewcontroller类中的项目?不这样做总是让我无法做到这一点。

3 个答案:

答案 0 :(得分:1)

您可能希望查看此here - 在目标c中创建静态类,然后通过类名在单独的文件中引用它们 - 如在链接示例中引用的视图控制器中那样。

否则,您可以在单独的.m文件中创建一个新类,然后对其进行编码,使得另一个类中的调用方法将首先创建此新类的实例,然后在此实例上调用必要的方法。

希望这有帮助。

答案 1 :(得分:1)

有几种方法可以实现这一目标。 一种方式是cocoa委托@protocol方式,第二种方式是创建对另一个类中每个对象的引用。

第一种方式你可以这样做:

@class Class2;

@interface Class1 : NSObject {
    Class2 *cls2Pointer;

}

@property Class2 *cls2Pointer;
@end



@class Class1;

@interface Class2 : NSObject {
    Class1 *cls1Pointer;

}
@property Class1 *cls1Pointer;
@end



int main(){
    Class1 cls1Obj = [[Class1 alloc] init];
    Class2 cls2Obj = [[Class2 alloc] init];

    [cls1Obj setCls2Pointer:cls2Obj];
    [cls2Obj setCls1Pointer:cls1Obj];

}

第二种方法是在一个/两个类中声明一个协议,以便能够传递参数并在其他对象上调用不同的方法:

    @protocol Class1Delegate

- (void)class1:(Class1)obj MethodWithArg:(id)arg;

@end


@interface Class1 : NSObject {
    id <Class1Delegate> delegate;
}

@end



@interface Class2 : NSObject <Class1Delegate>{

}

@end

@implementation Class2

- (void)class1:(Class1)obj MethodWithArg:(id)arg {
        //do stuff when called from the 1st class
}
@end

答案 2 :(得分:1)

基本上你要做的是创建一个或多个类,将代码移到这些类,然后在viewcontroller中创建这些类的实例

所以如果你的视图控制器中有一个方法

-(void)foo;

你会创建一个新的C组,并在那里移动方法。

然后在您的视图控制器中,您将创建该类的实例变量,例如。

C* myC;

然后使用alloc / init然后调用foo方法。这不是面向对象的,因为foo在任何方面都与C并不真正相关,所以方法foo可能只是一个与实例无关的静态方法,因此就像任何其他方法一样被调用,而不是像[C foo]那样来自视图控制器的[self foo]。

另一个OOP方法是将属于一起的功能移动到一个单独的类中,如示例中的动画。