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

Xav*_*ero 3 iphone delegates objective-c ios

我有2个类,比如A类和B类.B类是在A类中创建的.我在A类中有一个方法,需要在A类和B类中执行.在A类中调用方法本身很好.但我不确定在类B中调用该方法.我已经尝试将该方法声明为静态,但由于我不能在静态方法中使用实例变量,我认为使用委托会是一个好主意.由于我来自C#背景,我不确定在Objective C中使用它.从概念上讲,我已经在C#中实现了我需要的内容,如下所示.只是想知道在Objective C中它的等价物是什么.

class A
{

    public A()
    {
        B myclass = new B(() => calculate());                
    }

    public void calculate()
    {
        // todo
    }
}

class B
{
    public B(Action calculate)
    {
        calculate();
    }
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用协议来完成此操作.

use*_*234 8

我正好在研究时碰巧看过这篇文章.这是一个示例代码:

ClassA.h文件:

#import <Foundation/Foundation.h>
#import "ClassB.h"

@interface ClassA : NSObject <ClassBDelegate>
@end
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)