У меня небольшая проблема.Мой сценарий таков: я создам проект с большим количеством целей.Я хочу иметь «открытый код» (для всех целей) и «конкретный код».Проблема в следующем: В «открытом коде» мне НУЖНА вызывать функцию в «конкретном коде».
Моя первая попытка состояла в использовании категорий.Я создаю "public.h", а затем "public + specific.h" коды с использованием категорий.Класс, который будет использовать этот класс, должен будет:
#import "public+specific.h"
...
public *myClass = [[public alloc] init];
[myclass doSomething];
Чтобы использовать другой определенный класс, мне нужно только изменить # import и ничего более.Уникальная проблема заключается в том, что в «публичном классе» мне потребуется создать ложную функцию, например.
//public.h
@interface public : NSObject {}
...
- (void) doSomething {return };
//public+specific.h
@interface public (specific)
...
- (void) doSomething { //do what it really have to do };
Другие проблемы присущи категориям: я не могу создать локальную переменную класса, все придетсябыть объявленным в "public.h".Я хочу иметь все конкретные вещи в определенном классе ...
Хорошо, поэтому я пытаюсь по-другому: использовать наследование с делегатами.В классах "public.h" и "public + specific.h" это работает очень хорошо, нет необходимости использовать поддельные функции, все было хорошо.НО, (всегда, но), мне всегда придется выделять определенный класс, и если я этого не хочу, я могу создать поддельную функцию только для вызова делегата, поэтому у меня та же проблема, что и выше.Вот пример:
//In public.h
@protocol publicDelegate
-(void)doSomething;
@end
@interface public : NSObject {
id <publicDelegate> myDelegate;
}
-(id)initWithDelegate (id <publicDelegate>)initDelegate{
myDelegate = initDelegate;
[myDelegate doSomehing];
}
//public+specific.h //The '+' isn't correct here :P
#include public.h
@interface public_specific : public <publicDelegate> {}
- (id)init{
return [super initWithDelegate:self];
}
- (void) doSomething { //do what it really have to do };
Как я уже сказал, проблема в том, как я создаю этот объект
#import "public+specific.h"
...
public_specific *myClass = [[public_specific alloc] init];
[myClass doSomething];
. С этим мне придется создать много #ifопределено, #elif определено ... каждый раз, когда мне нужно создать объектный вызов.Для категорий мне нужно сделать это только с "# include" .
. Чтобы решить эту проблему, у меня могут быть такие вещи:
//in "public.h"
- (void) doSomething {
return [myDelegate doSomehing]
};
Другойраз я создам фальшивую функцию.И что хуже всего, для каждой новой функции в "public + specific.h" мне придется создавать еще одну фальшивую функцию .. zzz .. (в категориях я должен делать это только с функцией с вызовом "public.h" в "public"+ specific.h ")
Итак, у кого-нибудь есть другая идея для этой проблемы ??Это небольшая проблема, но я хочу сделать мой код хорошим, простым в разработке и очистке ...