NSClassFromString会影响性能吗?

Tom*_*men 2 iphone objective-c

我想创建一个依赖于模型的给定实例的类的控制器

 -(BaseController *)getControllerForModel:(Model *)model
    {
     BaseController *controller = nil;
     Class controllerClass = [BaseController class]; //the default value

        //find the right controller
     if ([model isMemberOfClass:[ModelClass1 class]]) 
      controllerClass = [ConcreteController1 class];
     else if ([model isMemberOfClass:[ModelClass2 class]])
      controllerClass = [ConcreteController2 class];
     else if ([model isMemberOfClass:[ModelClass3 class]])
      controllerClass = [ConcreteController3 class];
...
     else if ([model isMemberOfClass:[ModelClassX class]])
      controllerClass = [ConcreteControllerX class];
     else
      Trace(TRACELEVEL_WARNING, @"Unrecognized model type: %@", NSStringFromClass([model class]));

     //Now instantiate it with the model
     controller = [[[controllerClass alloc] initWithModel:model] autorelease];
     return slotController;
    }
Run Code Online (Sandbox Code Playgroud)

我想找到一个更灵活的解决方案,并想到有一个字典,它将Model-Classes映射到Controller-Classes,然后NSClassFromString可以给我正确的实例.

我的问题是:NSClassFromString如果我多次使用它(例如,一次100次),我的应用程序使用了很多吗?或者它会与上述方法一样快?

bbu*_*bum 5

通常,isMemberOfClass:以这种方式使用表示架构问题.

在这种情况下,为什么各个Model类都不能简单地实现一个+controllerClass方法呢?

我可以理解尼古拉希望在没有模型知道控制器的情况下维持控制器在模型之上的分层.但是,我的经验是,任何具有模型特定类型知识的控制层都会迅速破坏隔离; 模型层快速演变出控制器特定的行为.

因此,试图维持这种分离所增加的复杂性是不值得的.

  • 跳过箍实际上并不能保持隔离并造成不必要的复杂性.同样,这样的设计实际上并不是隔离控制器形式模型,因为控制器与模型紧密地交织在一起. (2认同)