Objective-C消息是否有等效的方法声明/定义分离?

时间:2011-08-03 00:06:43

标签: objective-c

假设我有一个Objective-c .m文件,定义了以下方法:

- (void) doOneThing {
      [self doAnotherThing];
}

- (void) doAnotherThing {
       [self stillOtherThings];
}

如果我编译它,xcode会向我发出警告,该类可能不响应-doAnotherThings,因为doAnotherThing定义在-doOneThing下面,并且编译器在编译-doOneThing时还不知道-doAnotherThing。当然,代码编译正确并确实有效,但我想摆脱那条警告信息。

解决这个问题的简单方法是在-doOneThing之前定义-doAnotherThing,但有时我喜欢在源代码中对相关方法进行分组,使其难以重新排序。如果这是C,我可以做类似的事情:

void doAnotherThing();

void doOneThing() {
    doAnotherThing();
}

void doAnotherThing() {
     ...still other things...
}

将定义与声明分开。有没有办法在objective-c中做这样的事情,或以其他方式解决我的问题?

2 个答案:

答案 0 :(得分:5)

解决这个问题的典型方法如下:

//in DoThings.h
@interface DoThings : NSObject {
    //instance variables go here
}

//public methods go here
- (void) doAPublicThing;

//properties go here

@end


//in DoThings.m
@interface DoThings (Private)
- (void)doOneThing;
- (void)doAnotherThing;
- (void)stillOtherThings;
@end

@implementation DoThings

- (void) doAPublicThing {
    [self doOneThing];
}

- (void) doOneThing {
    [self doAnotherThing];
}

- (void) doAnotherThing {
    [self stillOtherThings];
}

@end

答案 1 :(得分:2)

您需要在类的头文件中定义这些方法声明:

@interface MyCustomClass : NSObject

- (void) doOneThing;
- (void) doAnotherThing;

@end

然后一切都会按预期运作。