在Objective C中调用另一个类的方法

我有2个类,说A类和B类。B类是在A类中创build的。我有类A中的方法,需要在类A和类B中执行。调用类A本身的方法是好的。 但我不知道在B类中调用方法。我曾尝试将方法声明为静态方法,但是由于我不能在静态方法中使用实例variables,所以我认为使用委托将是一个好主意。 因为我来自C#背景,所以我不确定在Objective C中使用它。从概念上讲,我已经在C#中实现了我需要的东西,如下所示。 只是想知道在目标C中它相当于什么

class A { public A() { B myclass = new B(() => calculate()); } public void calculate() { // todo } } class B { public B(Action calculate) { calculate(); } } 

是否有可能使用协议来做到这一点。

我刚刚在研究中看到这个post。 这是一个示例代码:

ClassA.h文件:

 #import <Foundation/Foundation.h> #import "ClassB.h" @interface ClassA : NSObject <ClassBDelegate> @end 

ClassA.m文件:

 #import "ClassA.h" @implementation ClassA -(void)createAnInstanceOfClassB { ClassB *myClassB = [[ClassB alloc]init]; //create an instance of ClassB myClassB.delegate = self; //set self as the delegate // [myClassB optionalClassBMethod]; //this is optional to your question. If you also want ClassA to call method from ClassB } -(void)calculate { NSLog(@"Do calculate thing!"); // calculate can be called from ClassB or ClassA } @end 

ClassB.h文件:

 #import <Foundation/Foundation.h> @protocol ClassBDelegate <NSObject> -(void)calculate; //method from ClassA @end @interface ClassB : NSObject @property (assign) id <ClassBDelegate> delegate; //-(void)optionalClassBMethod; //this is optional to your question. If you also want ClassA to call method from ClassB @end 

ClassB.m文件:

 #import "ClassB.h" @implementation ClassB @synthesize delegate; -(void)whateverMethod { [self.delegate calculate]; // calling method "calculate" on ClassA } //-(void)optionalClassBMethod //this is optional to your question. If you also want ClassA to call method from ClassB //{ // NSLog(@"optionalClassBMethod"); // [self whateverMethod]; //} @end 

目标C你可能看到了什么

你可以参考这个post 。 但为此,你必须学习Objective C的一些语法。

如果你不熟悉Objective C&不直接处理Cocoa框架工作,那么你可以使用Objective C ++来完成你的工作。 你可以在C ++中编写你的代码。

在这里你可以使用A类的函数指针和传递静态方法。

或者你可以定义接口类。 从A传递A的对象到B的类

你可以让一个class级成为另一个class级的代表,但这是一种任意的关系。

有没有任何理由不使用inheritance – 从Z的A + B子类和Z是你的常用方法? 然后他们都可以打电话给[self calculate];

你可以使用notificationCenter来做到这一点。 例如

A类.h

 @interface A: UIViewController -(void)classAandBMethod; @end 

.M

 @implementation -(void)willPushToClassB { [[NSNotificationCenter defaultCenter] removeObserver:self]; [[NSNotificationCenter defaulCenter] addObserver:self selector:@selector(classAandBMethod) name:@"classAandBMethod_name" object:nil]; //push class B ClassB *b = [ClassB alloc] initWithNibName:@"ClassB" ........]; [self.navigationController pushViewController:b animated:YES]; } @end 

当您调用ClassB中的方法时:

 //this method in classB will call the method in Class a. -(void)callMethodInClassA{ NSNotification *subject = [NSNotification defaultCenter]; [subject postNotificationName:@"classAandBMethod_name" object:nil userinfo:whatEverInfoYouWant_dict]; [subject removeObserver:self]; } 

我很确定你在找什么是块。

在A类中,可以将calculate()定义为块。

然后在B类中,你可以有一种方法来计算块,并根据计算返回一些B的新实例(我假设这是什么意图?)。