Objective-C类在运行时交换

时间:2015-05-01 07:46:37

标签: ios objective-c

目前我们有类似......的课程结构。

GenericFruitViewController
    - AppleViewController
    - PearViewController
    - StrawberryViewController

特定视图控制器是子类,只改变少量实现。

我想做的是能够在运行时换出GenericViewController。我想改变通用视图控制器的工作方式并改变一些方法(这不会影响子类化的重写方法)。

但我希望能够打开/关闭此功能(A / B测试)。

目前我们有一个像......一样的工厂方法

- (GenericFruitViewController *)fruitControllerWithType:(FruitType)type
{
    if (type == Apple) {
        return [AppleViewController new];
    }

    return [GenericFruitViewController new];
}

我想做的事情(理想情况)就像......

- (GenericFruitViewController *)fruitControllerWithType:(FruitType)type
{
    // this is the new bit!
    if (switchOnTheTesting) {
        // swap GenericFruitViewController for my NewFruitViewController
    }
    // new bit ends

    // existing code not changed
    if (type == Apple) {
        // this now returns a subclass of NewFruitVC if switched
        return [AppleViewController new];
    }

    // this now returns NewFruitVC if switched
    return [GenericFruitViewController new];
}

通过执行此操作,只要它引用GenericFruitVC,就会使用我的新VC。

这甚至可能吗?

0 个答案:

没有答案