创建类别,inherance或委托?
问题描述:
我有一点问题。我的方案是:我将建立一个有很多目标的项目。我想要“公开代码”(针对所有目标)和“特定代码”。问题是:在“公共代码”中,我需要在“特定代码”处调用函数。创建类别,inherance或委托?
我的第一次尝试是使用类别。我使用类别创建“public.h”,然后是“public + specific.h”代码。将使用这个类的类将需要:
#import "public+specific.h"
...
public *myClass = [[public alloc] init];
[myclass doSomething];
要使用其他特定的类,我只需要改变#进口,仅此而已。唯一的问题是,在“公共课”中,我需要创建一个虚假的功能,比如。
//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];
有了这个,我会创造很多#如果定义,#elif指令定义...每次我需要创建一个对象调用。对于类别,我只需要使用“#include”执行此操作。
为了解决这个问题,我能有这样的事情:
//in "public.h"
- (void) doSomething {
return [myDelegate doSomehing]
};
还有一次,我将创建假的功能。最糟糕的是,对于“public + specific.h”中的每个新函数,我都必须创建另一个伪函数.. zzz ..(在类别中,我只能在public中调用“public.h”函数+ specific.h“)
那么,任何人有另一个想法来解决这个问题?这是一个小问题,但我想让我的代码好,易于开发和清洁...
我没有看到这可以帮助我。这只是创建另一个具有一些数据或功能的类。我认为看起来像创建特定的类。但谢谢你的提示。 – Rodrigo 2011-05-28 01:13:00
罗德里戈,我没有看到什么问题(从你原来的帖子)它不能解决。 – justin 2011-05-28 01:48:17