创建类别,继承还是委托?

问题描述

| 我有一个小问题。我的情况是:我将建立一个目标很多的项目。我要使用\“公共代码\”(针对所有目标)和\“特定代码\”。问题是:在“公共代码”中,我需要在“特定代码”处调用函数。 我的第一次尝试是使用类别。我使用类别创建\“ 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 \”) 那么,有人对这个问题有另一个想法吗?这是一个小问题,但是我想使我的代码更好,易于开发和清理...     

解决方法

        在许多情况下,构图会很好地为您服务。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...