问题描述
|
我有一个小问题。我的情况是:我将建立一个目标很多的项目。我要使用\“公共代码\”(针对所有目标)和\“特定代码\”。问题是:在“公共代码”中,我需要在“特定代码”处调用函数。
我的第一次尝试是使用类别。我使用类别创建\“ 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 define,#elif define...。对于类别,我只需要使用\“#include \”即可。
为了解决这个问题,我可以有这样的事情:
//in \"public.h\"
- (void) doSomething {
return [myDelegate doSomehing]
};
下次我将创建假函数。最糟糕的是,对于\“ public + specific.h \”中的每个新函数,我都必须创建另一个伪函数。zzz ..(按类别,我只必须对带有\“ public.h \”的函数执行此操作致电\“ public + specific.h \”)
那么,有人对这个问题有另一个想法吗?这是一个小问题,但是我想使我的代码更好,易于开发和清理...
解决方法
在许多情况下,构图会很好地为您服务。