есть ли эквивалент объявления метода / разделения определения для сообщений Objective C? - PullRequest
0 голосов
/ 03 августа 2011

Допустим, у меня есть файлjective-c .m со следующими определенными методами:

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

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

Если я скомпилирую это, xcode выдаст мне предупреждение о том, что класс может не отвечать на -doAnotherThings,потому что doAnotherThing определен ниже -doOneThing и компилятор еще не знает о -doAnotherThing, когда компилирует -doOneThing.Конечно, код компилируется правильно и фактически работает, но я бы хотел избавиться от этого предупреждающего сообщения.

Тривиальным способом решения этой проблемы было бы просто определить -doAnotherThing перед -doOneThing,но иногда мне нравится группировать связанные методы в исходном коде так, чтобы их было трудно переупорядочить.Если бы это был C, я мог бы сделать что-то вроде:

void doAnotherThing();

void doOneThing() {
    doAnotherThing();
}

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

, отделяя определение от объявления.Есть ли способ сделать что-то подобное в target-c или иным образом решить мою проблему?

Ответы [ 2 ]

5 голосов
/ 03 августа 2011

Типичный способ справиться с этим заключается в следующем:

//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
2 голосов
/ 03 августа 2011

Вам нужно определить эти объявления методов в вашем заголовочном файле для класса:

@interface MyCustomClass : NSObject

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

@end

Тогда все будет работать как положено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...