两个不同类中的循环相关方法

时间:2014-03-15 00:11:53

标签: objective-c

所以我一直在尝试组织我的Objective-C代码,因为截至目前,一切都在一个巨大的文件中。 在假设的情况下:

  • A类的方法是“alertCompleted”和“prepareAlert”。

  • B类有一个方法“submitPost”。

假设我在A的方法中,“prepareAlert”,我想从中调用B的方法“submitPost”。然后,从“submitPost”方法我需要在A。中调用“alertCompleted”。

正如你所看到的,B和B中的A调用方法调用A中的方法。如果我可以在同一个类中拥有所有方法但我真的需要组织我的代码(上面的方法只是示例),这显然是理想的。我怎么能做到这一点?据我所知,类别只允许类别类调用主类或反之,但不是两种方式,导入彼此标题给我循环依赖。

2 个答案:

答案 0 :(得分:3)

这不是一个大问题。您可以使用@class <classname>创建转发。

ClassA.h

@class B;

@interface A : NSObject
- (void)needsB:(B *)b;
@end

ClassB.h

@class A;

@interface B : NSObject
- (void)needsA:(A *)a;
@end

在.m文件中,您需要导入ClassA.h和ClassB.h

答案 1 :(得分:1)

这是单向的,虽然感觉有些过分:

ClassA.h

#import <Foundation/Foundation.h>

#import "ClassB.h"

@interface ClassA : NSObject

- (void) prepareAlert;

@end

ClassA.m

@implementation ClassA

- (void) prepareAlert {
    NSLog(@"Class A: Preparing Alert");

    ClassB * bClass = [ClassB new];
    [bClass submitPostWithTarget:self andCallback:@selector(handleCompletion)];
}

- (void) handleCompletion {
    NSLog(@"Class A: Handled Completion");
}

@end

ClassB.h

#import <Foundation/Foundation.h>

@interface ClassB : NSObject

- (void) submitPostWithTarget:(id)target andCallback:(SEL)callback;

@end

ClassB.m

#import "ClassB.h"

@implementation ClassB

- (void) submitPostWithTarget:(id)target andCallback:(SEL)callback {
    NSLog(@"Class B: Submitting Post");

    // Callback
    IMP imp = [target methodForSelector:callback];
    void (*func)(id, SEL) = (void *)imp;
    func(target, callback);
}

@end

然后当我想打电话时:

#import "ClassA.h"

跑得像:

ClassA * aClass = [ClassA new];
[aClass prepareAlert];

将打印:

2014-03-14 20:25:05.207 MyApp[52877:60b] Class A: Preparing Alert
2014-03-14 20:25:05.208 MyApp[52877:60b] Class B: Submitting Post
2014-03-14 20:25:05.209 MyApp[52877:60b] Class A: Handled Completion

这样,如果您想从ClassB中调用ClassA的特定实例,它仍然可以工作。