创建类别,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“)

那么,任何人有另一个想法来解决这个问题?这是一个小问题,但我想让我的代码好,易于开发和清洁...

在很多情况下,composition将为您服务。

+0

我没有看到这可以帮助我。这只是创建另一个具有一些数据或功能的类。我认为看起来像创建特定的类。但谢谢你的提示。 – Rodrigo 2011-05-28 01:13:00

+0

罗德里戈,我没有看到什么问题(从你原来的帖子)它不能解决。 – justin 2011-05-28 01:48:17